Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
Penting
Jangan gunakan Microsoft.EntityFrameworkCore.Sqlite atau Microsoft.Data.Sqlite dengan SpatiaLite di macOS dan Linux. Kedua paket menggunakan SQLitePCLRaw.bundle_e_sqlite3 secara default—versi SQLite paket bawaan yang tidak kompatibel dengan SQLite yang diinstal sistem. Penggunaannya dapat mengakibatkan kerusakan yang tidak terlihat saat dijalankan. Gunakan Microsoft.EntityFrameworkCore.Sqlite.Core atau Microsoft.Data.Sqlite.Core sebagai gantinya, bersama dengan penyedia SQLite sistem seperti yang ditunjukkan di bawah ini.
Perhatikan juga bahwa pustaka SQLite yang diinstal sistem mungkin memiliki opsi waktu kompilasi yang berbeda dari versi yang dibundel. Ini dapat memengaruhi ketersediaan fitur seperti fungsi matematika dan pencarian teks lengkap. Untuk memeriksa opsi dalam build SQLite Anda dengan cepat, jalankan PRAGMA compile_options; dan periksa fitur yang diandalkan aplikasi Anda.
Ganti Microsoft.EntityFrameworkCore.Sqlite dengan Microsoft.EntityFrameworkCore.Sqlite.Core dan referensikan SQLitePCLRaw.provider.sqlite3 paket untuk menggunakan pustaka SQLite sistem:
<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>
Nota
Dimulai dengan EF Core 11 (SQLitePCLRaw 3.0), ganti SQLitePCLRaw.provider.sqlite3 versi dengan 3.x.x. Lihat perubahan signifikan untuk detailnya.
Kemudian tambahkan inisialisasi eksplisit sebelum menggunakan SQLite:
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
Di macOS, Anda juga harus mengatur variabel lingkungan sebelum menjalankan aplikasi sehingga menggunakan SQLite versi Homebrew:
DYLD_LIBRARY_PATH="$(brew --prefix 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) | Menutupi(@geometry, @g) |
| geometri.Perpotongan(g) | Salib(@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. Pilih(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. Pilih(x => x.Property)) | Jangkauan(Proprietas) | EF Core 7.0 |
Sumber daya tambahan
- Beranda SpatiaLite
- Dokumentasi API NetTopologySuite