Térbeli adatok az SQLite EF Core-szolgáltatóban

Ez az oldal további információkat tartalmaz a térbeli adatok SQLite-adatbázis-szolgáltatóval való használatáról. A térbeli adatok EF Core-ban való használatával kapcsolatos általános információkért tekintse meg a térbeli adatok fő dokumentációját.

A SpatiaLite telepítése

Windows rendszeren a natív mod_spatialite kódtár NuGet-csomagfüggőségként van elosztva. Más platformokon külön kell telepíteni. Ez általában egy szoftvercsomag-kezelő használatával történik. Használhatja például az APT-t a Debianon és az Ubuntu-on; és Homebrew macOS rendszeren.

# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite

# macOS
brew install libspatialite

Sajnos a PROJ újabb verziói (a SpatiaLite függőségei) nem kompatibilisek az EF alapértelmezett SQLitePCLRaw csomagjával. Ezt a rendszer SQLite-kódtárának használatával megkerülheti.

Fontos

Ne használja Microsoft.EntityFrameworkCore.Sqlite a Microsoft.Data.Sqlite SpatiaLite-et macOS és Linux rendszeren. Mindkét csomag alapértelmezés szerint behúzza a SQLitePCLRaw.bundle_e_sqlite3 – egy csomagolt SQLite verziót, amely nem kompatibilis a rendszer által telepített SQLite-tal. A használata futásidőben csendes összeomlást okozhat. A Microsoft.EntityFrameworkCore.Sqlite.Core vagy Microsoft.Data.Sqlite.Core használatát javasoljuk a rendszer SQLite-szolgáltatójával együtt az alábbiak szerint.

Azt is vegye figyelembe, hogy a rendszer által telepített SQLite-kódtár fordítási ideje eltérő lehet, mint a csomagban lévő verzió. Ez befolyásolhatja az olyan funkciók rendelkezésre állását, mint a matematikai függvények és a teljes szöveges keresés. Az SQLite-build beállításainak gyors vizsgálatához futtassa PRAGMA compile_options; és ellenőrizze, hogy az alkalmazás mely funkciókra támaszkodik.

Cserélje le Microsoft.EntityFrameworkCore.Sqlite elemet Microsoft.EntityFrameworkCore.Sqlite.Core elemre, és a rendszer SQLite-könyvtárának használatához tegye hozzá a SQLitePCLRaw.provider.sqlite3 csomagot.

<ItemGroup>
  <!-- Use Sqlite.Core with the system SQLite provider instead of Microsoft.EntityFrameworkCore.Sqlite -->
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="10.0.0" />
  <PackageReference Include="SQLitePCLRaw.provider.sqlite3" Version="2.1.10" />

  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite" Version="10.0.0" />
</ItemGroup>

Megjegyzés:

Az EF Core 11 (SQLitePCLRaw 3.0) verziójától kezdve cserélje le a SQLitePCLRaw.provider.sqlite3 változatot a 3.x.x változatra. A részletekért tekintse meg a jelentős változásokat.

Ezután adjon hozzá explicit inicializálást az SQLite használata előtt:

SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());

MacOS rendszeren egy környezeti változót is be kell állítania az alkalmazás futtatása előtt, hogy a Homebrew SQLite-verzióját használja:

DYLD_LIBRARY_PATH="$(brew --prefix sqlite)/lib"

SRID konfigurálása

A SpatiaLite-ben az oszlopoknak oszloponként egy SRID-t kell megadniuk. Az alapértelmezett SRID az 0. Adjon meg egy másik SRID-t a HasSrid metódussal.

modelBuilder.Entity<City>().Property(c => c.Location)
    .HasSrid(4326);

Megjegyzés:

A 4326 a GPS-ben és más földrajzi rendszerekben használt WGS 84 szabványra utal.

Dimenzió

Az oszlopok alapértelmezett dimenziója (ordinátiák) az X és az Y. További, például Z vagy M parancsok engedélyezéséhez konfigurálja az oszloptípust.

modelBuilder.Entity<City>().Property(c => c.Location)
    .HasColumnType("POINTZ");

Térbeli függvényleképezések

Ez a táblázat azt mutatja be, hogy mely NetTopologySuite (NTS) tagok lesznek lefordítva, mely SQL-függvényekre.

.NET SQL
Geometria. Terület Terület(@geometry)
geometry.AsBinary() AsBinary(@geometry)
geometry.AsText() AsText(@geometry)
geometria.Határ Határ(@geometry)
Geometria. Puffer(távolság) Puffer(@geometry; @distance)
Geometria. Puffer(távolság, quadrantSegments) Puffer(@geometry; @distance@quadrantSegments)
Geometria. Centroid Centroid(@geometry)
Geometria. Tartalmazza(g) Contains(@geometry, @g)
Geometria. ConvexHull() ConvexHull(@geometry)
Geometria. CoveredBy(g) CoveredBy(@geometria, @g)
Geometria. Borító(g) Borító(@geometry, @g)
Geometria. Kereszt(g) Keresztek(@geometry, @g)
Geometria. Különbség(egyéb) Különbség(@geometry, @other)
Geometria.Dimenzió Dimenzió(@geometry)
Geometria. Szétválasztás(g) Disjoint(@geometry, @g)
Geometria. Távolság(g) Távolság(@geometry; @g)
Geometria. Boríték Boríték(@geometry)
Geometria. EqualsTopologically(g) Egyenlő(@geometry; @g)
Geometria.GeometriaTípus GeometryType(@geometry)
Geometria.GetGeometryN(n) GeometryN(@geometry, @n + 1)
Geometria. InteriorPoint PointOnSurface(@geometry)
Geometria. Metszet(egyéb) Metszet(@geometry, @other)
Geometria. Metszet(g) Metszet(@geometry, @g)
Geometria. IsEmpty IsEmpty(@geometry)
geometry.IsSimple IsSimple(@geometry)
Geometria. IsValid IsValid(@geometry)
Geometria. IsWithinDistance(geom, távolság) Távolság(@geometry; @geom)<= @distance
GeometriaHossz GLength(@geometry)
Geometria. NumGeometries NumGeometries(@geometry)
Geometria. NumPoints NumPoints(@geometry)
Geometria OgcGeometryType CASE GeometryType(@geometry) WHEN "POINT" THEN 1 ... VÉGÉN
Geometria. Átfedések(g) Átfedések(@geometry, @g)
Geometria. PointOnSurface PointOnSurface(@geometry)
Geometria.Kapcsolat(g, metszetMinta) Hozzon létre kapcsolatot(@geometry, @g, @intersectionPattern))
geometry.megfordít() ST_Reverse(@geometry)
Geometria. SRID SRID(@geometry)
Geometria.SzimmetrikusDifferencia(másik) SymDifference(@geometry, @other)
geometry.ToBinary() AsBinary(@geometry)
geometry.ToText() AsText(@geometry)
Geometria. Érintések(g) Érintések(@geometry, @g)
Geometria. Unió() UnaryUnion(@geometry)
Geometria. Union(egyéb) GUnion(@geometry, @other)
Geometria. Belső(g) Belül(@geometry, @g)
geometryCollection[i] GeometryN(@geometryCollection, @i + 1)
geometryCollection.Count NumGeometries(@geometryCollection)
lineString.Count NumPoints(@lineString)
lineString.EndPoint EndPoint(@lineString)
lineString.GetPointN(n) PointN(@lineString, @n + 1)
lineString.IsClosed IsClosed(@lineString)
lineString.IsRing IsRing(@lineString)
lineString.StartPoint StartPoint(@lineString)
multiLineString.IsClosed IsClosed(@multiLineString)
Pont. M M(@point)
Pont. X X(@point)
pont Y Y(@point)
Pont Z Z(@point)
Sokszög. Külső gyűrű ExteriorRing(@polygon)
Sokszög.GetInteriorRingN(n) InteriorRingN(@polygon, @n + 1)
Sokszög.NumInteriorRings (belső gyűrűk száma) NumInteriorRing(@polygon)

Összesítő függvények

.NET SQL Hozzáadva
GeometryCombiner.Combine(group.Select(x => x.Property)) Collect(Tulajdon) EF Core 7.0
ConvexHull.Create(csoport.Select(x => x.Property)) ConvexHull(Collect(Tulajdonság)) EF Core 7.0
UnaryUnionOp.Union(csoport.Select(x => x.Property)) GUnion(tulajdonság) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group. Select(x => x.Property)) Extent(Tulajdonság) EF Core 7.0

További erőforrások