Prostorová data ve zprostředkovateli SQLite EF Core
Tato stránka obsahuje další informace o použití prostorových dat u zprostředkovatele databáze SQLite. Obecné informace o používání prostorových dat v EF Core najdete v hlavní dokumentaci k Spatial Data.
Instalace SpatiaLite
Na Windows se nativní knihovna mod_spatialite
distribuuje jako závislost balíčku NuGet . Na jiných platformách je potřeba jej nainstalovat samostatně. Obvykle se to provádí pomocí správce softwarových balíčků. Můžete například použít APT v Debianu a Ubuntu; a Homebrew v macOS.
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
Novější verze PROJ (závislost SpatiaLite) bohužel nejsou kompatibilní s výchozími sady EF SQLitePCLRaw. Tento problém můžete obejít pomocí systémové knihovny SQLite.
<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>
Na macOSbudete také muset před spuštěním aplikace nastavit proměnnou prostředí, která zajistí použití Homebrew verze SQLite. V sadě Visual Studio pro Mac můžete tuto možnost nastavit v části Project > Možnosti projektu > Spustit > Konfigurace > Výchozí
DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib
Konfigurace SRID
Ve SpatiaLite musí sloupce zadat SRID pro každý sloupec. Výchozí SRID je 0
. Pomocí metody HasSrid zadejte jiný SRID.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
Poznámka
4326 odkazuje na WGS 84, standard používaný v GPS a dalších geografických systémech.
Dimenze
Výchozí souřadnice sloupce jsou X a Y. Chcete-li povolit další souřadnice, jako Z nebo M, nakonfigurujte typ sloupce.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
Mapování prostorových funkcí
Tato tabulka ukazuje, které členy NetTopologySuite (NTS) jsou přeloženy do kterých funkcí SQL.
.NET | SQL |
---|---|
geometrie.Plocha | Area(@geometry) |
geometrie.AsBinary() | AsBinary(@geometry) |
geometrie.AsText() | AsText(@geometry) |
geometrie. Hranice | Hranice(@geometry) |
geometrie.Pufrovat(vzdálenost) | Buffer(@geometry; @distance) |
geometrie. Buffer(vzdálenost, kvadrantSegments) | Buffer(@geometry; @distance, @quadrantSegments) |
geometrie.Těžiště | Centroid(@geometry) |
geometrie.obsahuje(g) | Obsahuje(@geometry, @g) |
geometrie. KonvexHull() | KonvexHull(@geometry) |
geometrie.CoveredBy(g) | CoveredBy(@geometry, @g) |
geometrie.Pokryje(g) | Cover(@geometry, @g) |
geometrie. Křížky(g) | Křížky(@geometry, @g) |
geometrie. Rozdíl(jiné) | Difference(@geometry; @other) |
geometrie.rozměr | Dimenze(@geometry) |
geometrie.neprotínající_se(g) | Nespojené(@geometry, @g) |
geometrie. Vzdálenost(g) | Vzdálenost(@geometry, @g) |
geometrie. Obálka | Obálka(@geometry) |
geometrie. EqualsTopologically(g) | Equals(@geometry; @g) |
geometrie. GeometryType | TypGeometrie(@geometry) |
geometrie.GetGeometryN(n) | GeometryN(@geometry; @n + 1) |
geometrie. InteriorPoint | PointOnSurface(@geometry) |
geometrie.Průnik(jiný) | Průnik(@geometry, @other) |
geometrie. Intersects(g) | Intersects(@geometry, @g) |
geometrie. IsEmpty | IsEmpty(@geometry) |
geometrie. IsSimple | IsSimple(@geometry) |
geometrie.IsValid | IsValid(@geometry) |
geometrie. IsWithinDistance(geom, vzdálenost) | Vzdálenost(@geometry; @geom)<= @distance |
geometrie. Délka | GLength(@geometry) |
geometrie.NumGeometrie | NumGeometries(@geometry) |
geometrie.NumPoints | NumPoints(@geometry) |
geometrie. OgcGeometryType | CASE GeometryType(@geometry) KDYŽ 'POINT' PAK 1 ... KONEC |
geometrie. Překrývání (g) | Překryvy(@geometry, @g) |
geometrie.BodNaPovrchu | PointOnSurface(@geometry) |
geometrie.Relate(g, vzor průniku) | Relate(@geometry, @g, @intersectionPattern) |
geometrie.Reverse() | ST_Reverse(@geometry) |
geometrie.SRID | SRID(@geometry) |
geometrie. SymmetricDifference(jiné) | SymDifference(@geometry, @other) |
geometrie. ToBinary() | AsBinary(@geometry) |
geometrie. ToText() | AsText(@geometry) |
geometrie. Touches(g) | Touches(@geometry, @g) |
geometrie.Union() | UnaryUnion(@geometry) |
geometrie.Union(other) | GUnion(@geometry, @other) |
geometrie.Within(g) | Within(@geometry, @g) |
geometryCollection[i] | GeometryN(@geometryCollection; @i + 1) |
sbírkaGeometrií.Počet | NumGeometries(@geometryCollection) |
lineString.Count | NumPoints(@lineString) |
lineString.EndPoint | EndPoint(@lineString) |
lineString.GetPointN(n) získa n-tý bod z geometrického objektu LineString. | PointN(@lineString; @n + 1) |
lineString.IsClosed | IsClosed(@lineString) |
lineString.IsRing | IsRing(@lineString) |
lineString.StartPoint | StartPoint(@lineString) |
multiLineString.IsClosed | IsClosed(@multiLineString) |
bod. M | M(@point) |
bod. X | X(@point) |
bod. Y | Y(@point) |
bod Z | Z(@point) |
mnohoúhelník. Vnější obvod | ExteriorRing(@polygon) |
mnohoúhelník.getVnitřníKruhN(n) | InteriorRingN(@polygon, @n + 1) |
mnohoúhelník. NumInteriorRings | NumInteriorRing(@polygon) |
Agregační funkce
.NET | SQL | Přidáno do |
---|---|---|
GeometryCombiner.Combine(group.Select(x => x.Property)) | Collect(Vlastnost) | 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(Vlastnost) | EF Core 7.0 |
EnvelopeCombiner.CombineAsGeometry(group.select(x => x.Property)) | Rozsah(Vlastnost) | EF Core 7.0 |
Další zdroje informací
- domovská stránka
SpatiaLite - Dokumentace k rozhraní API NetTopologySuite