SQLite EF Core Sağlayıcısında Uzamsal Veriler
Bu sayfa, SQLite veritabanı sağlayıcısıyla uzamsal verileri kullanma hakkında ek bilgiler içerir. EF Core'da uzamsal verileri kullanma hakkında genel bilgi için ana Uzamsal Veriler belgelerine bakın.
SpatiaLite'i yükleme
Windows'da yerel mod_spatialite kitaplığı NuGet paket bağımlılığı olarak dağıtılır. Diğer platformların ayrı olarak yüklemesi gerekir. Bu genellikle bir yazılım paketi yöneticisi kullanılarak yapılır. Örneğin, Debian ve Ubuntu'da APT kullanabilirsiniz; ve MacOS üzerinde Homebrew.
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
Ne yazık ki, PROJ'nin daha yeni sürümleri (SpatiaLite bağımlılığı) EF'in varsayılan SQLitePCLRaw paketiyle uyumsuz. Bunun yerine sistem SQLite kitaplığını kullanarak bu sorunu geçici olarak giderebilirsiniz.
<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>
MacOS'ta, uygulamanızı çalıştırmadan önce Homebrew'ın SQLite sürümünü kullanması için bir ortam değişkeni ayarlamanız da gerekir. Mac için Visual Studio'de, bunu Project > Project Options > Run > Configurations > Default altında ayarlayabilirsiniz
DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib
SRID'yi yapılandırma
SpatiaLite'te sütunların sütun başına bir SRID belirtmesi gerekir. Varsayılan SRID değeridir 0
. HasSrid yöntemini kullanarak farklı bir SRID belirtin.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
Dekont
4326, GPS ve diğer coğrafi sistemlerde kullanılan bir standart olan WGS 84'e karşılık gelir.
Boyut
Bir sütunun varsayılan boyutu (veya sıraları) X ve Y'dir. Z veya M gibi ek sıraları etkinleştirmek için sütun türünü yapılandırın.
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
Uzamsal işlev eşlemeleri
Bu tabloda hangi NetTopologySuite (NTS) üyelerinin hangi SQL işlevlerine çevrildiği gösterilir.
.NET | SQL |
---|---|
Geometri. Alan | Alan(@geometry) |
Geometri. AsBinary() | AsBinary(@geometry) |
Geometri. AsText() | AsText(@geometry) |
Geometri. Sınır | Sınır(@geometry) |
Geometri. Arabellek(uzaklık) | Buffer(@geometry, @distance) |
Geometri. Arabellek(uzaklık, quadrantSegments) | Buffer(@geometry, @distance, @quadrantSegments) |
Geometri. Centroid | Centroid(@geometry) |
Geometri. contains(g) | Contains(@geometry, @g) |
Geometri. ConvexHull() | ConvexHull(@geometry) |
Geometri. CoveredBy(g) | CoveredBy(@geometry, @g) |
Geometri. Kapaklar(g) | Kapaklar(@geometry, @g) |
Geometri. Çaprazlar(g) | Crosses(@geometry, @g) |
Geometri. Fark (diğer) | Fark(@geometry, @other) |
Geometri. Boyut | Boyut(@geometry) |
Geometri. Kopuk(g) | Kopuk(@geometry, @g) |
Geometri. Uzaklık(g) | Uzaklık(@geometry, @g) |
Geometri. Zarf | Zarf(@geometry) |
Geometri. EqualsTopologically(g) | Eşittir(@geometry, @g) |
Geometri. GeometryType | GeometryType(@geometry) |
Geometri. GetGeometryN(n) | GeometryN(@geometry, @n + 1) |
Geometri. İç Mekan Noktası | PointOnSurface(@geometry) |
Geometri. Kesişim (diğer) | Kesişim(@geometry, @other) |
Geometri. Kesişimler(g) | Kesişimler(@geometry, @g) |
Geometri. Isempty | IsEmpty(@geometry) |
Geometri. IsSimple | IsSimple(@geometry) |
Geometri. Isvalid | IsValid(@geometry) |
Geometri. IsWithinDistance(geom, uzaklık) | Mesafe(@geometry, @geom)<= @distance |
Geometri. Uzun -luğu | GLength(@geometry) |
Geometri. NumGeometries | NumGeometries(@geometry) |
Geometri. NumPoints | NumPoints(@geometry) |
Geometri. OgcGeometryType | CASE GeometryType(@geometry) WHEN 'POINT' THEN 1 ... Son -unda |
Geometri. Örtüşmeler(g) | Çakışmalar(@geometry, @g) |
Geometri. PointOnSurface | PointOnSurface(@geometry) |
Geometri. Relate(g, intersectionPattern) | Relate(@geometry, @g, @intersectionPattern) |
Geometri. Reverse() | ST_Reverse(@geometry) |
Geometri. SRID | SRID(@geometry) |
Geometri. Simetrik Fark (diğer) | SymDifference(@geometry, @other) |
Geometri. ToBinary() | AsBinary(@geometry) |
Geometri. ToText() | AsText(@geometry) |
Geometri. Dokunmalar(g) | Dokunmalar(@geometry, @g) |
Geometri. Union() | UnaryUnion(@geometry) |
Geometri. Birleşim (diğer) | GUnion(@geometry, @other) |
Geometri. İçinde(g) | İçinde(@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) |
Nokta. M | M(@point) |
Nokta. X | X(@point) |
Nokta. Y | Y(@point) |
Nokta. Z | Z(@point) |
Çokgen. DışTan Alma | Dış(@polygon) |
Çokgen. GetInteriorRingN(n) | InteriorRingN(@polygon, @n + 1) |
Çokgen. NumInteriorRings | NumInteriorRing(@polygon) |
Toplama işlevleri
.NET | SQL | eklendi |
---|---|---|
GeometryCombiner.Combine(group. Select(x => x.Property)) | Collect(Özellik) | EF Core 7.0 |
ConvexHull.Create(grup. Select(x => x.Property)) | ConvexHull(Collect(Özellik)) | EF Core 7.0 |
UnaryUnionOp.Union(group. Select(x => x.Property)) | GUnion(Özellik) | EF Core 7.0 |
EnvelopeCombiner.CombineAsGeometry(grup. Select(x => x.Property)) | Kapsam(Özellik) | EF Core 7.0 |