Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 |