Dati spaziali nel provider SQLite EF Core
Questa pagina include informazioni aggiuntive sull'uso dei dati spaziali con il provider di database SQLite. Per informazioni generali sull'uso dei dati spaziali in EF Core, vedere la documentazione principale relativa ai dati spaziali.
Installazione di SpatiaLite
In Windows la libreria di mod_spatialite nativa viene distribuita come dipendenza del pacchetto NuGet. Altre piattaforme devono installarle separatamente. Questa operazione viene in genere eseguita usando una gestione pacchetti software. Ad esempio, è possibile usare APT in Debian e Ubuntu; e Homebrew in MacOS.
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
Sfortunatamente, le versioni più recenti di PROJ (una dipendenza di SpatiaLite) non sono compatibili con il bundle SQLitePCLRaw predefinito di EF. È possibile risolvere questo problema usando invece la libreria SQLite di sistema.
<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>
In macOS è anche necessario impostare una variabile di ambiente prima di eseguire l'app in modo che usi la versione di SQLite di Homebrew. In Visual Studio per Mac, è possibile impostarlo in > Opzioni > progetto Opzioni esecuzione > configurazioni predefinite >
DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib
Configurazione di SRID
In SpatiaLite le colonne devono specificare un identificatore SRID per colonna. L'identificatore SRID predefinito è 0
. Specificare un identificatore SRID diverso usando il metodo HasSrid.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
Nota
4326 si riferisce a WGS 84, uno standard usato in GPS e altri sistemi geografici.
Dimensione
La dimensione predefinita (o le coordinate) di una colonna è X e Y. Per abilitare coordinate aggiuntive come Z o M, configurare il tipo di colonna.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
Mapping delle funzioni spaziali
Questa tabella mostra i membri netTopologySuite (NTS) convertiti in cui funzioni SQL.
.NET | SQL |
---|---|
Geometria. Zona | Area (@geometry) |
Geometria. AsBinary() | AsBinary(@geometry) |
Geometria. AsText() | AsText(@geometry) |
Geometria. Confine | Limite (@geometry) |
Geometria. Buffer(distance) | Buffer (@geometry, @distance) |
Geometria. Buffer(distance, quadrantSegments) | Buffer(@geometry, @distance, @quadrantSegments) |
Geometria. Baricentro | Centroid(@geometry) |
Geometria. Contains(g) | Contains(@geometry, @g) |
Geometria. ConvexHull() | ConvexHull(@geometry) |
Geometria. CoveredBy(g) | CoveredBy(@geometry, @g) |
Geometria. Cover(g) | Cover (@geometry, @g) |
Geometria. Crosses(g) | Crosses(@geometry, @g) |
Geometria. Differenza (altro) | Differenza (@geometry, @other) |
Geometria. Dimensione | Dimensione (@geometry) |
Geometria. Disgiunto(g) | Disgiunto(@geometry, @g) |
Geometria. Distance(g) | Distance(@geometry, @g) |
Geometria. Busta | Busta (@geometry) |
Geometria. EqualsTopologically(g) | Equals(@geometry, @g) |
Geometria. GeometryType | GeometryType(@geometry) |
Geometria. GetGeometryN(n) | GeometryN(@geometry, @n + 1) |
Geometria. InteriorPoint | PointOnSurface(@geometry) |
Geometria. Intersezione (altro) | Intersezione (@geometry, @other) |
Geometria. Intersects(g) | Intersects(@geometry, @g) |
Geometria. Isempty | IsEmpty(@geometry) |
Geometria. IsSimple | IsSimple(@geometry) |
Geometria. IsValid | IsValid(@geometry) |
Geometria. IsWithinDistance(geom, distance) | Distance(@geometry, @geom)<= @distance |
Geometria. Lunghezza | GLength(@geometry) |
Geometria. NumGeometries | NumGeometries(@geometry) |
Geometria. NumPoint | NumPoints(@geometry) |
Geometria. OgcGeometryType | CA edizione Standard GeometryType(@geometry) WHEN 'POINT' THEN 1 ... FINE |
Geometria. Sovrapposizioni (g) | Sovrapposizioni (@geometry, @g) |
Geometria. PointOnSurface | PointOnSurface(@geometry) |
Geometria. Relate(g, intersezionePattern) | Relate(@geometry, @g, @intersectionPattern) |
Geometria. Reverse() | ST_Reverse(@geometry) |
Geometria. SRID | SRID(@geometry) |
Geometria. SymmetricDifference(other) | SymDifference(@geometry, @other) |
Geometria. ToBinary() | AsBinary(@geometry) |
Geometria. ToText() | AsText(@geometry) |
Geometria. Touches(g) | Touches(@geometry, @g) |
Geometria. Union() | UnaryUnion(@geometry) |
Geometria. Union(altro) | GUnion(@geometry, @other) |
Geometria. 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) |
Punto. M | M(@point) |
Punto. X | X(@point) |
Punto. Y | Y(@point) |
Punto. Z | Z(@point) |
Poligono. ExteriorRing | ExteriorRing(@polygon) |
Poligono. GetInteriorRingN(n) | InteriorRingN(@polygon, @n + 1) |
Poligono. NumInteriorRings | NumInteriorRing(@polygon) |
Funzioni di aggregazione
.NET | SQL | Aggiunta 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 |