Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här sidan innehåller ytterligare information om hur du använder rumsliga data med SQLite-databasprovidern. Allmän information om hur du använder rumsliga data i EF Core finns i dokumentationen om spatiala data .
Så här installerar du SpatiaLite
I Windows distribueras det interna mod_spatialite biblioteket som ett NuGet-paketberoende . Andra plattformar måste installera den separat. Detta görs vanligtvis med hjälp av en programpakethanterare. Du kan till exempel använda APT på Debian och Ubuntu; och Homebrew på MacOS.
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
Tyvärr är nyare versioner av PROJ (ett beroende av SpatiaLite) inte kompatibla med EF:s standardpaket för SQLitePCLRaw. Du kan kringgå detta genom att använda systemets SQLite-bibliotek i stället.
Viktigt!
Använd inte Microsoft.EntityFrameworkCore.Sqlite eller Microsoft.Data.Sqlite med SpatiaLite på macOS och Linux. Båda paketen hämtar SQLitePCLRaw.bundle_e_sqlite3 som standard – en paketerad version av SQLite som inte är kompatibel med systeminstallerad SQLite. Om du använder det kan det leda till en tyst krasch vid körning. Använd Microsoft.EntityFrameworkCore.Sqlite.Core eller Microsoft.Data.Sqlite.Core i stället, tillsammans med system-SQLite-providern enligt nedan.
Observera också att det systeminstallerade SQLite-biblioteket kan ha andra kompileringsalternativ än den paketerade versionen. Detta kan påverka tillgängligheten för funktioner som matematiska funktioner och fulltextsökning. Om du snabbt vill granska alternativen i din SQLite-version kör du PRAGMA compile_options; och kontrollera vilka funktioner programmet förlitar sig på.
Ersätt Microsoft.EntityFrameworkCore.Sqlite med Microsoft.EntityFrameworkCore.Sqlite.Core och referera SQLitePCLRaw.provider.sqlite3 till paketet för att använda systemets SQLite-bibliotek:
<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>
Anmärkning
Från och med EF Core 11 (SQLitePCLRaw 3.0) ersätter du SQLitePCLRaw.provider.sqlite3 versionen med 3.x.x. Mer information finns under ändringar som bryter kompatibilitet.
Lägg sedan till explicit initiering innan du använder SQLite:
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
På macOS måste du också ange en miljövariabel innan du kör appen så att den använder Homebrews version av SQLite:
DYLD_LIBRARY_PATH="$(brew --prefix sqlite)/lib"
Konfigurera SRID
I SpatiaLite måste kolumner ange ett SRID per kolumn. Standard-SRID är 0. Ange ett annat SRID med metoden HasSrid.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
Anmärkning
4326 avser WGS 84, en standard som används i GPS och andra geografiska system.
Mått
Standarddimensionen (eller koordinaterna) för en kolumn är X och Y. Om du vill aktivera ytterligare ordinater som Z eller M konfigurerar du kolumntypen.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
Spatial funktionsmappning
Den här tabellen visar vilka NetTopologySuite-medlemmar (NTS) som översätts till vilka SQL-funktioner.
| .NET | SQL |
|---|---|
| Geometri. Området | Area(@geometry) |
| Geometri.AsBinary() | AsBinary(@geometry) |
| Geometri.AsText() | AsText(@geometry) |
| Geometri. Gränsen | Gräns(@geometry) |
| Geometri. Buffert(avstånd) | Buffert(@geometry, @distance) |
| Geometri. Buffert(avstånd, kvadrantsegment) | Buffert(@geometry, @distance, @quadrantSegments) |
| Geometri. Centroid | Centroid(@geometry) |
| geometri.Contains(g) | Contains(@geometry, @g) |
| geometri.ConvexHull() | ConvexHull(@geometry) |
| geometri.CoveredBy(g) | CoveredBy(@geometry, @g) |
| Geometri.Täcker(g) | Omslag(@geometry, @g) |
| Geometri. Korsningar(g) | Korsningar(@geometry, @g) |
| Geometri. Difference(other) | Difference(@geometry, @other) |
| Geometri. Dimension | Dimension(@geometry) |
| Geometri. Disjoint(g) | Disjoint(@geometry, @g) |
| Geometri. Avstånd(g) | Avstånd(@geometry, @g) |
| Geometri. Kuvert | Kuvert(@geometry) |
| Geometri. EqualsTopologically(g) | Är lika med(@geometry, @g) |
| Geometri.GeometryType | GeometryType(@geometry) |
| geometry.GetGeometryN(n) | GeometryN(@geometry, @n + 1) |
| geometry.InteriorPoint | PointOnSurface(@geometry) |
| Geometri. Skärningspunkt(annan) | Skärningspunkt(@geometry, @other) |
| Geometri. Korsningar(g) | Korsningar(@geometry, @g) |
| geometry.IsEmpty | IsEmpty(@geometry) |
| Geometri.IsSimple | IsSimple(@geometry) |
| Geometri.IsValid | IsValid(@geometry) |
| Geometri.IsWithinDistance(geom, avstånd) | Distans(@geometry, @geom)<= @distance |
| Geometri. Längd | GLength(@geometry) |
| geometry.NumGeometries | NumGeometries(@geometry) |
| geometry.NumPoints | NumPoints(@geometry) |
| geometry.OgcGeometryType | CASE GeometryType(@geometry) WHEN 'POINT' THEN 1 ... SLUTET |
| Geometri. Överlappningar(g) | Överlappningar(@geometry, @g) |
| Geometri.PunktPåYtan | PointOnSurface(@geometry) |
| Geometri. Relate(g, intersectionPattern) | Relate(@geometry, @g, @intersectionPattern) |
| Geometri.Reverse() | ST_Reverse(@geometry) |
| geometry.SRID | SRID(@geometry) |
| geometry.SymmetricDifference(other) | SymDifference(@geometry, @other) |
| Geometri.ToBinary() | AsBinary(@geometry) |
| geometry.ToText() | AsText(@geometry) |
| Geometri. Touches(g) | Touches(@geometry, @g) |
| geometry.Union() | UnaryUnion(@geometry) |
| Geometri. Union(övrigt) | GUnion(@geometry, @other) |
| Geometri. Inom(g) | Inom(@geometry, @g) |
| geometryCollection[i] | GeometryN(@geometryCollection, @i + 1) |
| geometryCollection.Count (antal) | 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) |
| Punkt M | M(@point) |
| Punkt. X | X(@point) |
| Punkt Y | Y(@point) |
| Punkt Z | Z(@point) |
| Polygon. Exteriörring | ExteriorRing(@polygon) |
| Polygon.GetInteriorRingN(n) | InteriorRingN(@polygon, @n + 1) |
| Polygon. NumInteriorRings | NumInteriorRing(@polygon) |
Aggregatfunktioner
| .NET | SQL | Har lagts till i |
|---|---|---|
| GeometryCombiner.Combine(group. Select(x => x.Property)) | Collect(Property) | EF Core 7.0 |
| ConvexHull.Create(group. Select(x => x.Property)) | ConvexHull(Collect(Property)) | EF Core 7.0 |
| UnaryUnionOp.Union(grupp.Select(x => x.Property)) | GUnion(Property) | EF Core 7.0 |
| EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) | Utsträckning(Property) | EF Core 7.0 |