Bagikan melalui


Data Spasial di Penyedia Inti SQLite EF

Halaman ini mencakup informasi tambahan tentang menggunakan data spasial dengan penyedia database SQLite. Untuk informasi umum tentang menggunakan data spasial di EF Core, lihat dokumentasi Data Spasial utama.

Menginstal SpatiaLite

Di Windows, pustaka mod_spatialite asli didistribusikan sebagai dependensi paket NuGet . Platform lain perlu menginstalnya secara terpisah. Ini biasanya dilakukan menggunakan manajer paket perangkat lunak. Misalnya, Anda dapat menggunakan APT pada Debian dan Ubuntu; dan Homebrew di MacOS.

# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite

# macOS
brew install libspatialite

Sayangnya, versi PROJ yang lebih baru (dependensi SpatiaLite) tidak kompatibel dengan bundel default EF SQLitePCLRaw. Anda dapat mengatasinya dengan menggunakan pustaka SQLite sistem sebagai gantinya.

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

Di macOS, Anda juga perlu mengatur variabel lingkungan sebelum menjalankan aplikasi sehingga menggunakan SQLite versi Homebrew. Di Visual Studio untuk Mac, Anda dapat mengatur ini di Project > Project Options > Run > Configurations > Default

DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib

Mengonfigurasi SRID

Di SpatiaLite, kolom perlu menentukan SRID per kolom. SRID default adalah 0. Tentukan SRID yang berbeda menggunakan metode HasSrid.

modelBuilder.Entity<City>().Property(c => c.Location)
    .HasSrid(4326);

Nota

4326 mengacu pada WGS 84, standar yang digunakan dalam GPS dan sistem geografis lainnya.

Dimensi

Dimensi default (atau ordinat) kolom adalah X dan Y. Untuk mengaktifkan ordinat tambahan seperti Z atau M, konfigurasikan jenis kolom.

modelBuilder.Entity<City>().Property(c => c.Location)
    .HasColumnType("POINTZ");

Pemetaan fungsi spasial

Tabel ini menunjukkan anggota NetTopologySuite (NTS) yang diterjemahkan ke dalam fungsi SQL mana.

.NET SQL
geometri. Daerah Luas(@geometry)
geometri.AsBinary() AsBinary(@geometry)
geometri. AsText() AsText(@geometry)
geometri. Perbatasan Batas(@geometry)
geometri. Buffer(jarak) Buffer(@geometry, @distance)
geometri. Buffer(jarak, quadrantSegments) Buffer(@geometry, @distance, @quadrantSegments)
geometri. Sentroid Centroid(@geometry)
geometri.Mengandung(g) Contains(@geometry, @g)
geometri.ConvexHull() ConvexHull(@geometry)
geometri.CoveredBy(g) CoveredBy(@geometry, @g)
geometri.Menutupi(g) Covers(@geometry, @g)
geometri.Perpotongan(g) Crosses(@geometry, @g)
geometri. Perbedaan(lainnya) Perbedaan(@geometry, @other)
geometri. Dimensi Dimensi (@geometry)
geometri.Disjoint(g) Disjoint(@geometry, @g)
Geometri.Jarak(g) Jarak(@geometry, @g)
geometri.Envelope Amplop(@geometry)
geometri. EqualsTopologically(g) Sama dengan(@geometry, @g)
geometri.GeometryType GeometryType(@geometry)
geometri.GetGeometryN(n) GeometriN(@geometry, @n + 1)
geometri.TitikInterior PointOnSurface(@geometry)
geometri.Persilangan(lain) Persimpangan(@geometry, @other)
geometri.Interseksi(g) Intersects(@geometry, @g)
geometri. IsEmpty IsEmpty(@geometry)
geometri.IsSimple IsSimple(@geometry)
geometri.IsValid IsValid(@geometry)
geometri.IsWithinDistance(geom, jarak) Jarak(@geometry, @geom)<= @distance
geometri. Panjangnya GLength(@geometry)
geometri.NumGeometries NumGeometries(@geometry)
geometri. NumPoints NumPoints(@geometry)
geometri.OgcGeometryType CASE GeometryType(@geometry) KETIKA 'POINT' MAKA 1 ... UJUNG
geometri. Tumpang tindih(g) Tumpang tindih(@geometry, @g)
geometri.TitikDiPermukaan PointOnSurface(@geometry)
geometri. Relate(g, intersectionPattern) Relate(@geometry, @g, @intersectionPattern)
geometri.Reverse() ST_Reverse(@geometry)
Geometri.SRID SRID(@geometry)
geometri. SymmetricDifference(lainnya) SymDifference(@geometry, @other))
geometri.ToBinary() AsBinary(@geometry)
geometri.ToText() AsText(@geometry)
geometri. Sentuhan(g) Menyentuh(@geometry, @g)
geometri.Union() UnaryUnion(@geometry)
geometri.Union(lainnya) GUnion(@geometry, @other)
geometri. Dalam(g) Dalam(@geometry, @g)
geometryCollection[i] GeometriN(@geometryCollection, @i + 1)
KoleksiGeometri.Jumlah 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)
titik. M M(@point)
titik.X X(@point)
titik.Y Y(@point)
titik Z Z(@point)
Poligon. EksteriorRing ExteriorRing(@polygon)
Poligon.GetInteriorRingN(n) InteriorRingN(@polygon, @n + 1)
Poligon. NumInteriorRings NumInteriorRing(@polygon)

Fungsi agregat

.NET SQL Ditambahkan dalam
GeometryCombiner.Combine(group.Select(x => x.Property)) Kumpulkan(Property) 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(Properti) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) Jangkauan(Proprietas) EF Core 7.0

Sumber daya tambahan