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
- Beranda SpatiaLite
- Dokumentasi API NetTopologySuite