Share via


Ruimtelijke gegevens in de SQLite EF Core-provider

Deze pagina bevat aanvullende informatie over het gebruik van ruimtelijke gegevens met de SQLite-databaseprovider. Zie de belangrijkste documentatie over ruimtelijke gegevens voor algemene informatie over het gebruik van ruimtelijke gegevens in EF Core.

SpatiaLite installeren

In Windows wordt de systeemeigen mod_spatialite bibliotheek gedistribueerd als een NuGet-pakketafhankelijkheid . Andere platforms moeten deze afzonderlijk installeren. Dit wordt meestal gedaan met behulp van een softwarepakketbeheer. U kunt bijvoorbeeld APT gebruiken op Debian en Ubuntu; en Homebrew op MacOS.

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

# macOS
brew install libspatialite

Helaas zijn nieuwere versies van PROJ (een afhankelijkheid van SpatiaLite) niet compatibel met de standaard SQLitePCLRaw-bundel van EF. U kunt dit omzeilen door in plaats daarvan de SQLite-bibliotheek van het systeem te gebruiken.

Belangrijk

Gebruik Microsoft.EntityFrameworkCore.Sqlite of Microsoft.Data.Sqlite niet met SpatiaLite op macOS en Linux. Beide pakketten bevatten standaard SQLitePCLRaw.bundle_e_sqlite3: een gebundelde versie van SQLite die niet compatibel is met de door het systeem geïnstalleerde SQLite. Het gebruik ervan kan leiden tot een stille crash tijdens runtime. Gebruik Microsoft.EntityFrameworkCore.Sqlite.Core of Microsoft.Data.Sqlite.Core in plaats daarvan, samen met de SQLite-provider van het systeem, zoals hieronder wordt weergegeven.

Vervang Microsoft.EntityFrameworkCore.Sqlite door Microsoft.EntityFrameworkCore.Sqlite.Core en verwijs naar het SQLitePCLRaw.provider.sqlite3-pakket om de SQLite-bibliotheek van het systeem te gebruiken.

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

Opmerking

Vanaf EF Core 11 (SQLitePCLRaw 3.0) vervangt u de SQLitePCLRaw.provider.sqlite3 versie door 3.x.x. Bekijk de belangrijke wijzigingen voor meer informatie.

Voeg vervolgens expliciete initialisatie toe voordat u SQLite gebruikt:

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

In macOS moet u ook een omgevingsvariabele instellen voordat u uw app uitvoert, zodat deze gebruikmaakt van de versie van SQLite van Homebrew:

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

SRID configureren

In SpatiaLite moeten kolommen een SRID per kolom opgeven. De standaard-SRID is 0. Geef een andere SRID op met behulp van de HasSrid-methode.

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

Opmerking

4326 verwijst naar WGS 84, een standaard die wordt gebruikt in GPS en andere geografische systemen.

Dimensie

De standaarddimensie (of coördinaten) van een kolom is X en Y. Als u extra coördinaten zoals Z of M wilt inschakelen, configureert u het kolomtype.

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

Ruimtelijke functietoewijzingen

In deze tabel ziet u welke Leden van NetTopologySuite (NTS) worden omgezet in welke SQL-functies.

.NET SQL
Geometrie. Gebied Oppervlakte(@geometry)
Geometrie. AsBinary() AsBinary(@geometry)
Geometrie.AsText() AsText(@geometry)
Geometrie. Grens Grens (@geometry)
Geometrie. Buffer (afstand) Buffer(@geometry, @distance)
Geometrie. Buffer(afstand, kwadrantSegmenten) Buffer(@geometry, @distance, @quadrantSegments)
Geometrie Zwaartepunt Centroid(@geometry)
Geometrie. Contains(g) Contains(@geometry, @g)
Geometrie. ConvexHull() ConvexHull(@geometry)
Geometrie. CoveredBy(g) CoveredBy(@geometry, @g)
Geometrie. Covers(g) Covers(@geometry, @g)
Geometrie. Kruisen(g) Kruisen (@geometry, @g)
Geometrie. Verschil (overig) Verschil (@geometry, @other)
Geometrie. Dimensie Dimensie (@geometry)
Geometrie. Niet-aaneengesloten(g) Niet-aaneengesloten(@geometry; @g)
Geometrie. Afstand(g) Afstand(@geometry, @g)
Geometrie.Envelope Envelop (@geometry)
Geometrie. Is gelijk aanTopologisch(g) Is gelijk aan(@geometry; @g)
Geometrie.GeometrieType GeometryType(@geometry)
Geometrie.GetGeometryN(n) Geometrie(@geometry, @n + 1)
Geometrie. InteriorPoint PointOnSurface(@geometry)
Geometrie. Snijpunt (overig) Snijpunt (@geometry, @other)
Geometrie. Kruisingen(g) Snijdt(@geometry, @g)
Geometrie. Isempty IsEmpty(@geometry)
Geometrie.IsSimple IsSimple(@geometry)
Geometrie. IsValid IsValid(@geometry)
Geometrie. IsWithinDistance(geom, afstand) Afstand(@geometry, @geom)<= @distance
Geometrie.Lengte GLength(@geometry)
Geometrie. NumGeometrieën NumGeometries(@geometry)
Geometrie. NumPoints NumPoints(@geometry)
Geometrie.OgcGeometryType CASE GeometryType(@geometry) WANNEER 'POINT' THEN 1 ... EINDE
Geometrie. Overlappingen(g) Overlapt(@geometry, @g)
Geometrie. PointOnSurface PointOnSurface(@geometry)
Geometrie. Relate(g, intersectionPattern) Relate(@geometry, @g, @intersectionPattern)
geometry.Omgekeerd() ST_Reverse(@geometry)
Geometrie. SRID SRID(@geometry)
Geometrie.SymmetricDifference(other) SymDifference(@geometry; @other)
Geometrie. ToBinary() AsBinary(@geometry)
geometry.ToText() AsText(@geometry)
Geometrie. Aanrakingen (g) Touches(@geometrie, @g)
Geometrie.Union() UnaryUnion(@geometry)
geometrie.verenig(andere) GUnion(@geometry, @other)
Geometrie. Binnen(g) Within(@geometry, @g)
geometryCollection[i] GeometryN(@geometryCollection, @i + 1)
geometryCollectie.Aantal NumGeometries(@geometryCollection)
lineString.Count AantalPunten(@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)
Punt. M M(@point)
Punt. X X(@point)
Punt. Y Y(@point)
Punt. Z Z(@point)
polygoon.Buitenring ExteriorRing(@polygon)
polygon.GetInteriorRingN(n) InteriorRingN(@polygon, @n + 1)
Veelhoek. NumInteriorRings NumInteriorRing(@polygon)

Gecompileerde functies

.NET SQL Toegevoegd in
GeometryCombiner.Combine(groep.Select(x => x.Property)) Collect(eigenschap) EF Core 7.0
ConvexHull.Create(groep.Select(x => x.Property)) ConvexHull(Collect(Property)) EF Core 7.0
UnaryUnionOp.Union(groep.Select(x => x.Property)) GUnion(eigenschap) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(groep). Select(x => x.Property)) Omvang(eigenschap) EF Core 7.0

Aanvullende bronnen