SQLite EF Core 提供者中的空間數據
此頁面包含在 SQLite 資料庫提供者中使用空間資料的其他資訊。 如需在 EF Core 中使用空間數據的一般資訊,請參閱主要 空間數據 檔。
安裝SpatiaLite
在 Windows 上,原生 mod_spatialite
函式庫會作為 NuGet 套件的 相依性來發行。 其他平臺需要個別安裝。 這通常是使用軟體套件管理員來完成。 例如,您可以在 Debian 和 Ubuntu 上使用 APT;和 MacOS 上的 Homebrew。
# Debian/Ubuntu
apt-get install libsqlite3-mod-spatialite
# macOS
brew install libspatialite
不幸的是,作為 SpatiaLite 依賴項的較新版本 PROJ 與 EF 的預設 SQLitePCLRaw 組合包不相容。 您可以改用系統 SQLite 連結庫來解決此問題。
<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上,您也需要在執行應用程式之前設定環境變數,使其使用 Homebrew 的 SQLite 版本。 在 Visual Studio for Mac 中,您可以在 [Project > 項目選項] 的 [> 執行] 下設定此選項,[> 組態] - [> 預設]
DYLD_LIBRARY_PATH=/usr/local/opt/sqlite/lib
設定SRID
在SpatiaLite中,資料行需要為每個資料行指定SRID。 預設的 SRID 值是 0
。 使用 HasSrid 方法指定不同的 SRID。
modelBuilder.Entity<City>().Property(c => c.Location)
.HasSrid(4326);
注意
4326 是指 WGS 84,這是 GPS 和其他地理系統中使用的標準。
尺寸
數據行的預設維度(或序號)為 X 和 Y。若要啟用其他序號,例如 Z 或 M,請設定資料行類型。
modelBuilder.Entity<City>().Property(c => c.Location)
.HasColumnType("POINTZ");
空間函式映射
下表顯示哪些 NetTopologySuite (NTS) 成員會轉譯成哪些 SQL 函式。
.NET | SQL |
---|---|
幾何學。面積 | 區域(@geometry) |
幾何學。AsBinary() | AsBinary(@geometry) |
geometry.AsText() | AsText(@geometry) |
幾何學。邊界 | 界限(@geometry) |
幾何學。緩衝區(距離) | Buffer(@geometry,@distance) |
幾何學。Buffer(distance, quadrantSegments) | Buffer(@geometry,@distance,@quadrantSegments) |
幾何學・質心 | 心形(@geometry) |
幾何學。Contains(g) | Contains(@geometry,@g) |
幾何學.ConvexHull() | ConvexHull(@geometry) |
幾何學。CoveredBy(g) | CoveredBy(@geometry,@g) |
幾何學。封面(g) | 封面(@geometry,@g) |
幾何學。十字(g) | 十字(@geometry,@g) |
幾何學。差異(其他) | 差異(@geometry,@other) |
幾何學。尺寸 | 維度(@geometry) |
幾何學。脫節(g) | 不相交(@geometry,@g) |
幾何學。Distance(g) | 距離(@geometry,@g)) |
幾何學。信封 | 信封(@geometry) |
幾何.EqualsTopologically(g) | Equals(@geometry,@g) |
幾何學.幾何類型 | GeometryType(@geometry) |
幾何學。GetGeometryN(n) | GeometryN(@geometry,@n + 1) |
幾何學。InteriorPoint | PointOnSurface(@geometry) |
幾何學。交集(其他) | 交集(@geometry, @other)) |
幾何學。交集(g) | 交集(@geometry, @g)) |
geometry.IsEmpty | IsEmpty(@geometry) |
geometry.IsSimple | IsSimple(@geometry) |
geometry.IsValid | IsValid(@geometry) |
幾何學。IsWithinDistance(geom, distance) | 距離(@geometry, @geom)<= @distance |
幾何學。長度 | 幾何長度(@geometry) |
幾何學。NumGeometries | NumGeometries(@geometry) |
幾何學.NumPoints | NumPoints(@geometry) |
幾何學。OgcGeometryType | CASE GeometryType(@geometry) 當 'POINT' 然後 1 ...結束 |
幾何學。重疊(g) | 重疊(@geometry、@g)) |
幾何學。PointOnSurface | PointOnSurface(@geometry) |
幾何學。Relate(g, intersectionPattern) | Relate(@geometry,@g,@intersectionPattern)) |
幾何體.Reverse() | ST_Reverse(@geometry) |
幾何學。SRID | SRID(@geometry) |
幾何學。SymmetricDifference(其他) | SymDifference(@geometry,@other) |
幾何學。ToBinary() | AsBinary(@geometry) |
geometry.ToText() | AsText(@geometry) |
幾何學。觸控(g) | 觸控(@geometry,@g) |
幾何學。Union() | 一元統一(@geometry) |
幾何體.合併(其他) | GUnion(@geometry,@other) |
幾何.Within(g) | 內(@geometry,@g) |
geometryCollection[i](幾何集合的第 i 項) | GeometryN(@geometryCollection,@i + 1) |
geometryCollection.Count | NumGeometries(@geometryCollection) |
lineString.Count | NumPoints(@lineString) |
線串.終點 | EndPoint(@lineString) |
lineString.GetPointN(n) | PointN(@lineString,@n + 1) |
lineString.IsClosed | IsClosed(@lineString) |
lineString.IsRing | IsRing(@lineString) |
線字串.起始點 | StartPoint(@lineString) |
multiLineString.IsClosed | IsClosed(@multiLineString) |
點M | M(@point) |
點X | X(@point) |
點Y | Y(@point) |
點.Z | Z(@point) |
多邊形的外部環 | 外環(@polygon) |
多邊形.GetInteriorRingN(n) | InteriorRingN(@polygon,@n + 1) |
多邊形.NumInteriorRings | NumInteriorRing(@polygon) |
聚合函數
.NET | SQL | 已新增 |
---|---|---|
GeometryCombiner.Combine(group.Select(x => x.Property)) | Collect(屬性) | 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(屬性) | EF Core 7.0 |
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) | Extent(屬性) | EF Core 7.0 |