Sdílet prostřednictvím


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í