Freigeben über


Räumliche Daten im SQLite EF Core Provider

Diese Seite enthält zusätzliche Informationen zur Verwendung von räumlichen Daten mit dem SQLite-Datenbankanbieter. Allgemeine Informationen zur Verwendung von räumlichen Daten in EF Core finden Sie in der Hauptdokumentation Spatial Data.For general information about using spatial data in EF Core, see the main Spatial Data documentation.

Installieren von SpatiaLite

Unter Windows wird die native mod_spatialite-Bibliothek als NuGet-Paketabhängigkeit verteilt. Andere Plattformen müssen sie separat installieren. Dies erfolgt in der Regel mithilfe eines Softwarepaket-Managers. Beispielsweise können Sie APT auf Debian und Ubuntu verwenden; und Homebrew unter MacOS.

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

# macOS
brew install libspatialite

Leider sind neuere Versionen von PROJ (eine Abhängigkeit von SpatiaLite) nicht mit dem Standardmäßigen SQLitePCLRaw-Bundlevon EF kompatibel. Sie können dies umgehen, indem Sie stattdessen die System SQLite-Bibliothek verwenden.

<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>

Auf macOSmüssen Sie ebenfalls eine Umgebungsvariable setzen, bevor Sie Ihre App ausführen, damit die Homebrew-Version von SQLite verwendet wird. In Visual Studio für Mac können Sie dies unter Projekt > Projektoptionen > Ausführen > Konfigurationen > Standard festlegen.

DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib

Konfigurieren von SRID

In SpatiaLite muss in jeder Spalte eine SRID angegeben sein. Die standardmäßige SRID ist 0. Geben Sie eine andere SRID mithilfe der HasSrid-Methode an.

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

Anmerkung

4326 bezieht sich auf WGS 84, einen Standard, der in GPS und anderen geografischen Systemen verwendet wird.

Dimension

Die Standarddimension (ordinates) einer Spalte ist X und Y. Um zusätzliche Ordinaten wie Z oder M zu aktivieren, konfigurieren Sie den Spaltentyp.

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

Räumliche Funktionszuordnungen

In dieser Tabelle ist zu sehen, welche NetTopologySuite-Member (NTS) in welche SQL-Funktionen übersetzt werden.

.NET SQL
geometry.Area Area(@geometry)
geometry.AsBinary() AsBinary(@geometry)
geometry.AsText() AsText(@geometry)
geometry.Boundary Grenze(@geometry)
geometry.Buffer(distance) Buffer(@geometry, @distance)
geometry.Buffer(distance, quadrantSegments) Buffer(@geometry, @distance, @quadrantSegments)
geometry.Centroid Centroid(@geometry)
geometry.Contains(g) Contains(@geometry, @g)
geometry.ConvexHull() ConvexHull(@geometry)
geometry.CoveredBy(g) CoveredBy(@geometry, @g)
geometry.Covers(g) Covers(@geometry, @g)
geometry.Crosses(g) Crosses(@geometry, @g)
geometry.Difference(other) Difference(@geometry, @other)
geometry.Dimension Dimension(@geometry)
geometry.Disjoint(g) Disjoint(@geometry, @g)
geometry.Distance(g) Distance(@geometry, @g)
geometry.Envelope Envelope(@geometry)
geometry.EqualsTopologically(g) Equals(@geometry, @g)
geometry.GeometryType GeometryType(@geometry)
geometry.GetGeometryN(n) GeometryN(@geometry, @n + 1)
geometry.InteriorPoint PointOnSurface(@geometry)
geometry.Intersection(other) Intersection(@geometry, @other)
geometry.Intersects(g) Intersects(@geometry, @g)
geometry.IsEmpty IsEmpty(@geometry)
geometry.IsSimple IsSimple(@geometry)
geometry.IsValid IsValid(@geometry)
geometry.IsWithinDistance(geom, distance) Distance(@geometry, @geom)<= @distance
geometry.Length GLength(@geometry)
geometry.NumGeometries NumGeometries(@geometry)
geometry.NumPoints NumPoints(@geometry)
geometry.OgcGeometryType CASE GeometryType(@geometry) WHEN 'POINT' THEN 1 ... END
geometry.Overlaps(g) Overlaps(@geometry, @g)
geometry.PointOnSurface PointOnSurface(@geometry)
geometry.Relate(g, intersectionPattern) Relate(@geometry, @g, @intersectionPattern)
geometry.Reverse() ST_Reverse(@geometry)
geometry.SRID SRID(@geometry)
geometry.SymmetricDifference(other) SymDifference(@geometry, @other)
geometry.ToBinary() AsBinary(@geometry)
geometry.ToText() AsText(@geometry)
geometry.Touches(g) Touches(@geometry, @g)
geometry.Union() UnaryUnion(@geometry)
geometry.Union(other) GUnion(@geometry, @other)
geometry.Within(g) Within(@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)
point.M M(@point)
point.X X(@point)
point.Y Y(@point)
point.Z Z(@point)
polygon.ExteriorRing ExteriorRing(@polygon)
polygon.GetInteriorRingN(n) InteriorRingN(@polygon, @n + 1)
polygon.NumInteriorRings NumInteriorRing(@polygon)

Aggregatfunktionen

.NET SQL Hinzugefügt in
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(group.Select(x => x.Property)) GUnion(Property) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) Extent(Property) EF Core 7.0

Weitere Ressourcen