Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í
- domovská stránka
SpatiaLite - Dokumentace k rozhraní API NetTopologySuite