Rumsliga data i SQLite EF Core-leverantören

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());

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

Ytterligare resurser