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

Ek kaynaklar