Udostępnij za pośrednictwem


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