Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ık , NuGet paketi bağımlılığı olarak dağıtılır. Diğer platformların bunu ayrı 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.
Önemli
macOS ve Linux'ta SpatiaLite ile Microsoft.EntityFrameworkCore.Sqlite veya Microsoft.Data.Sqlite kullanmayın. Her iki paket de varsayılan olarak SQLite'in sistem tarafından yüklenen SQLite ile uyumlu olmayan paketlenmiş bir sürümünü SQLitePCLRaw.bundle_e_sqlite3 içeri çeker. Bunu kullanmak çalışma zamanında sessiz bir kilitlenmeye neden olabilir.
Microsoft.EntityFrameworkCore.Sqlite.Core veya Microsoft.Data.Sqlite.Core, aşağıda gösterildiği gibi sistem SQLite sağlayıcısıyla birlikte kullanın.
Ayrıca, sistem tarafından yüklenen SQLite kitaplığının paketlenmiş sürümden farklı derleme zamanı seçenekleri olabileceğini unutmayın. Bu, matematik işlevleri ve tam metin arama gibi özelliklerin kullanılabilirliğini etkileyebilir. SQLite derlemenizdeki seçenekleri hızla incelemek için komutunu çalıştırın PRAGMA compile_options; ve uygulamanızın bağlı olduğu özellikleri denetleyin.
Microsoft.EntityFrameworkCore.Sqlite ile Microsoft.EntityFrameworkCore.Sqlite.Core değiştirin ve sistem SQLite kütüphanesini kullanmak için SQLitePCLRaw.provider.sqlite3 paketine başvurun.
<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>
Uyarı
EF Core 11 (SQLitePCLRaw 3.0) ile başlayarak, SQLitePCLRaw.provider.sqlite3 sürümünü 3.x.x ile değiştirin. Ayrıntılar için önemli değişikliklere bakın.
Ardından SQLite'i kullanmadan önce açık başlatma ekleyin:
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
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 gerekir:
DYLD_LIBRARY_PATH="$(brew --prefix 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);
Uyarı
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) |
| geometry.AsText() | AsText(@geometry) |
| Geometri. Sınır | Sınır(@geometry) |
| geometry.arabellek(uzaklık) | Buffer(@geometry, @distance) |
| geometry.Buffer(uzaklık, çeyrekBölümSayısı) | 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) | Kapak(@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) |
| Geometry.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) |
| GeometriIsSimple | IsSimple(@geometry) |
| Geometri.IsValid | IsValid(@geometry) |
| Geometri. IsWithinDistance(geom, uzaklık) | Mesafe(@geometry, @geom)<= @distance |
| Geometri.Uzunluk | GLength(@geometry) |
| Geometri. NumGeometriler | NumGeometries(@geometry) |
| geometry.NumPoints | NumPoints(@geometry) |
| geometry.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) |
| Geom.SRID | SRID(@geometry) |
| Geometri. Simetrik Fark (diğer) | SymDifference(@geometry, @other) |
| Geometri.ToBinary() | AsBinary(@geometry) |
| geometry.ToText() | AsText(@geometry) |
| Geometri. Dokunmalar(g) | Dokunmalar(@geometry, @g) |
| geometry.Union() | UnaryUnion(@geometry) |
| Geometri. Birleşim (diğer) | GUnion(@geometry, @other) |
| Geometri.İçinde(g) | İçinde(@geometry, @g) |
| geometryKoleksiyonu[i] | GeometryN(@geometryCollection, @i + 1) |
| geometryCollection.Count | NumGeometries(@geometryCollection) |
| lineString.Count (Bu, lineString içindeki öğelerin sayısını belirtir.) | NumPoints(@lineString) |
| lineString.EndPoint | EndPoint(@lineString) |
| lineString.GetPointN(n) | PointN(@lineString, @n + 1) |
| lineString.IsClosed | IsClosed(@lineString) |
| lineString.IsRing | IsRing(@lineString) |
| lineString.StartPoint (Başlangıç Noktası) | BaşlangıçNoktası(@lineString) |
| multiLineString.IsClosed | Kapalı mı(@multiLineString) |
| Nokta. M | M(@point) |
| Nokta. X | X(@point) |
| Nokta Y | Y(@point) |
| Nokta. Z | Z(@point) |
| Çokgen.Dış Halka | DışYüzeyÇizgisi(@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 |