共用方式為


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

其他資源