Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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 |