Dane przestrzenne w dostawcy SQLite EF Core
Ta strona zawiera dodatkowe informacje o korzystaniu z danych przestrzennych z dostawcą bazy danych SQLite. Aby uzyskać ogólne informacje na temat używania danych przestrzennych w programie EF Core, zobacz główną dokumentację Spatial Data.
Instalowanie programu SpatiaLite
W systemie Windows biblioteka natywna mod_spatialite
jest dystrybuowana jako zależność pakietu NuGet. Inne platformy muszą zainstalować je oddzielnie. Zazwyczaj odbywa się to przy użyciu menedżera pakietów oprogramowania. Na przykład można użyć narzędzia APT w systemach Debian i Ubuntu; i Homebrew w systemie MacOS.
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
Niestety, nowsze wersje PROJ (zależność SpatiaLite) są niezgodne z domyślnym pakietem SQLitePCLRaw EF. Można to obejść za pomocą systemowej biblioteki SQLite.
<ItemGroup>
<!-- Use bundle_sqlite3 instead with SpatiaLite on macOS and Linux -->
<!--<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />-->
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="3.1.0" />
<PackageReference Include="SQLitePCLRaw.bundle_sqlite3" Version="2.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite" Version="3.1.0" />
</ItemGroup>
W systemie macOS należy również ustawić zmienną środowiskową przed uruchomieniem aplikacji, aby korzystała z wersji SQLite dostarczanej przez Homebrew. W programie Visual Studio dla komputerów Mac możesz ustawić to pod opcjami projektu Project > Project Options > Run > Konfiguracje > Domyślne
DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib
Konfigurowanie SRID
W SpatiaLite, kolumny muszą określać SRID dla każdej kolumny. Domyślny identyfikator SRID to 0
. Określ inny identyfikator SRID przy użyciu metody HasSrid.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
Notatka
4326 odnosi się do WGS 84, standard używany w GPS i innych systemach geograficznych.
Wymiar
Domyślny wymiar (lub współrzędne) kolumny to X i Y. Aby włączyć dodatkowe ordinates, takie jak Z lub M, skonfiguruj typ kolumny.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
Mapowania funkcji przestrzennych
W tej tabeli przedstawiono, które elementy członkowskie NetTopologySuite (NTS) są tłumaczone na funkcje SQL.
.NET | SQL |
---|---|
geometria. Obszar | Obszar (@geometry) |
geometria.AsBinary() | AsBinary(@geometry) |
geometria.AsText() | AsText(@geometry) |
geometria. Granica | Granica (@geometry) |
geometria. Bufor (odległość) | Buffer(@geometry, @distance) |
geometria.Bufor(odległość, segmenty ćwiartki) | Buffer(@geometry, @distance, @quadrantSegments) |
geometria.Centroid | Centroid(@geometry) |
geometria.zawiera(g) | Contains(@geometry, @g) |
geometria.ConvexHull() | ConvexHull(@geometry) |
geometria.CoveredBy(g) | CoveredBy(@geometry, @g) |
geometria. Okładki (g) | Obejmuje (@geometry, @g) |
geometria. Krzyże (g) | Krzyże (@geometry, @g) |
geometria. Różnice (inne) | Difference(@geometry, @other) |
geometria. Wymiar | "Wymiar (geometria)" |
geometria.Disjoint(g) | Rozłączne (@geometry, @g) |
geometria. Odległość (g) | Odległość (@geometry, @g) |
geometria. Koperta | Koperta (@geometry) |
geometria. EqualsTopologically(g) | Równa się(@geometry, @g) |
geometria.GeometryType | GeometryType(@geometry) |
geometria.GetGeometryN(n) | GeometryN(@geometry, @n + 1) |
geometria.PunktWewnętrzny | PointOnSurface(@geometry) |
geometria. Skrzyżowanie (inne) | Skrzyżowanie (@geometry, @other) |
geometria.Intersects(g) | Intersects(@geometry, @g) |
geometria.IsEmpty | IsEmpty(@geometry) |
geometria.JestProsta | IsSimple(@geometry) |
geometria.IsValid | IsValid(@geometry) |
geometria.IsWithinDistance(geom, distance) | Odległość(@geometry, @geom)<= @distance |
geometria.Długość | GLength(@geometry) |
geometria. NumGeometries | NumGeometries (@geometry) |
geometria. Liczba punktów | NumPoints(@geometry) |
geometria.OgcGeometryType | CASE GeometryType(@geometry) KIEDY 'PUNKT', A NASTĘPNIE 1 ... KONIEC |
geometria.NakładaSię(g) | Nakładanie (@geometry, @g) |
geometria.PunktNaPowierzchni | PointOnSurface(@geometry) |
geometria.Relate(g, intersectionPattern) | Relate(@geometry, @g, @intersectionPattern) |
geometria.Reverse() | ST_Reverse(@geometry) |
geometria. SRID | SRID(@geometry) |
geometria. SymmetricDifference(inne) | SymDifference(@geometry, @other) |
geometria.ToBinary() | AsBinary(@geometry) |
geometria.ToText() | AsText(@geometry) |
geometria.Dotyka(g) | Touches(@geometry, @g) |
geometria.Union() | UniaOperanduJednoelementowego(@geometry) |
geometria. Union(inne) | GUnion(@geometry, @other) |
geometria.Wewnątrz(g) | Within(@geometry, @g) |
geometryCollection[i] | GeometryN(@geometryCollection, @i + 1) |
geometryCollection.Liczba | NumGeometries (@geometryCollection) |
lineString.Count | NumPoints(@lineString) |
lineString.EndPoint | Punkt końcowy(@lineString) |
lineString.GetPointN(n) | PointN(@lineString, @n + 1) |
lineString.IsClosed | IsClosed(@lineString) |
lineString.IsRing | IsRing(@lineString) |
lineString.PunktStartowy | Punkt startowy(@lineString) |
multiLineString.IsClosed | IsClosed(@multiLineString) |
punkt. M | M(@point) |
punkt. X | X(@point) |
punkt. Y | Y(@point) |
punkt. Z | Z(@point) |
wielokąt.ZewnętrznyPierścień | Zewnętrzny pierścień (@polygon) |
wielokąt.GetInteriorRingN(n) | InteriorRingN(@polygon, @n + 1) |
wielokąt. NumInteriorRings | NumInteriorRing(@polygon) |
Funkcje agregujące
.NET | SQL | Dodano w |
---|---|---|
GeometryCombiner.Combine(group.Select(x => x.Property)) | Collect(Właściwość) | EF Core 7.0 |
ConvexHull.Create(grupa.Select(x => x.Property)) | ConvexHull(Collect(Property)) | EF Core 7.0 |
UnaryUnionOp.Union(group.Select(x => x.Property)) | GUnion(Właściwość) | EF Core 7.0 |
KopertaCombiner.CombineAsGeometry(grupa.Select(x => x.Property)) | Rozmiar(Właściwość) | EF Core 7.0 |
Dodatkowe zasoby
- Strona główna SpatiaLite
- dokumentacja interfejsu API NetTopologySuite