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

Ek kaynaklar