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.

Důležité

Nepoužívejte Microsoft.EntityFrameworkCore.Sqlite ani Microsoft.Data.Sqlite s spatiaLite v systémech macOS a Linux. Oba balíčky ve výchozím nastavení zahrnují SQLitePCLRaw.bundle_e_sqlite3, což je zabalená verze SQLite, jež není kompatibilní se systémově nainstalovaným SQLite. Při použití může dojít k tichému chybovému ukončení za běhu. Použijte Microsoft.EntityFrameworkCore.Sqlite.Core nebo Microsoft.Data.Sqlite.Core místo toho společně se systémovým poskytovatelem SQLite, jak je znázorněno níže.

Všimněte si také, že systém nainstalovaná knihovna SQLite může mít jiné možnosti kompilace než sbalené verze. To může ovlivnit dostupnost funkcí, jako jsou matematické funkce a fulltextové vyhledávání. Pokud chcete rychle zkontrolovat možnosti v sestavení SQLite, spusťte PRAGMA compile_options; a zkontrolujte funkce, které vaše aplikace využívá.

Nahraďte Microsoft.EntityFrameworkCore.Sqlite s Microsoft.EntityFrameworkCore.Sqlite.Core a odkažte na balíček SQLitePCLRaw.provider.sqlite3, abyste použili systémovou knihovnu SQLite.

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

Poznámka

Počínaje EF Core 11 (SQLitePCLRaw 3.0) nahraďte verzi SQLitePCLRaw.provider.sqlite3 verzí 3.x.x. Podrobnosti najdete v zásadních změnách .

Potom před použitím SQLite přidejte explicitní inicializaci:

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

V systému macOS budete také muset před spuštěním aplikace nastavit proměnnou prostředí, aby používala verzi SQLite homebrew:

DYLD_LIBRARY_PATH="$(brew --prefix 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.

platforma .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) Relace(@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

platforma .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í