Прочитать на английском

Поделиться через


Пространственные данные в поставщике SQLite EF Core

Эта страница содержит дополнительные сведения об использовании пространственных данных с поставщиком базы данных SQLite. Общие сведения об использовании пространственных данных в EF Core см. в основной документации по пространственным данным .

Установка SpatiaLite

В Windows собственная библиотека mod_spatialite распространяется как зависимость пакета NuGet. Другие платформы должны установить его отдельно. Обычно это делается с помощью диспетчера пакетов программного обеспечения. Например, можно использовать APT в Debian и Ubuntu; и Homebrew в MacOS.

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

# macOS
brew install libspatialite

К сожалению, более новые версии PROJ (зависимость SpatiaLite) несовместимы с пакетом SQLitePCLRaw по умолчанию EF. Вместо этого можно обойти эту проблему с помощью системной библиотеки 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 вам также потребуется задать переменную среды перед запуском приложения, чтобы она использовала версию SQLite homebrew. В Visual Studio для Mac можно задать это в разделе "Параметры > проекта проекта>" > > по умолчанию

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

Настройка SRID

В SpatiaLite столбцы должны указывать SRID для каждого столбца. По умолчанию используется 0SRID. Укажите другой SRID с помощью метода HasSrid.

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)
Геометрии. AsText() AsText(@geometry)
Геометрии. Границы Границы(@geometry)
Геометрии. Buffer(distance) Buffer(@geometry, @distance)
Геометрии. Buffer(distance, quadrantSegments) Buffer(@geometry, @distance@quadrantSegments)
Геометрии. Центроид Centroid(@geometry)
Геометрии. Contains(g) Contains(@geometry, @g)
Геометрии. ConvexHull() ConvexHull(@geometry)
Геометрии. CoveredBy(g) CoveredBy(@geometry, @g)
Геометрии. Обложки(g) Обложки(@geometry, @g)
Геометрии. Кресты(g) Кресты(@geometry, @g)
Геометрии. Разница(другие) Разница(@geometry, @other)
Геометрии. Размер Dimension(@geometry)
Геометрии. Disjoint(g) Disjoint(@geometry, @g)
Геометрии. Distance(g) Distance(@geometry, @g)
Геометрии. Конверт Конверт(@geometry)
Геометрии. EqualsTopologically(g) Equals(@geometry, @g)
Геометрии. GeometryType GeometryType(@geometry)
Геометрии. GetGeometryN(n) GeometryN(@geometry, @n + 1)
Геометрии. InteriorPoint PointOnSurface(@geometry)
Геометрии. Пересечение (другое) Пересечение(@geometry, @other)
Геометрии. Intersects(g) Intersects(@geometry, @g)
Геометрии. Isempty IsEmpty(@geometry)
Геометрии. IsSimple IsSimple(@geometry)
Геометрии. Isvalid IsValid(@geometry)
Геометрии. IsWithinDistance(geom, расстояние) Distance(@geometry, @geom)<= @distance
Геометрии. Длина GLength(@geometry)
Геометрии. NumGeometries NumGeometries(@geometry)
Геометрии. NumPoints NumPoints(@geometry)
Геометрии. OgcGeometryType CASE GeometryType(@geometry) КОГДА "POINT" ЗАТЕМ 1 ... КОНЕЦ
Геометрии. Перекрытие(г) Перекрывается(@geometry, @g)
Геометрии. PointOnSurface PointOnSurface(@geometry)
Геометрии. Отношение(g, пересечениеPattern) Связь(@geometry, @g, @intersectionPattern)
Геометрии. Обратный() ST_Reverse(@geometry)
Геометрии. SRID SRID(@geometry)
Геометрии. СимметричнаяDifference(other) SymDifference(@geometry, @other)
Геометрии. ToBinary() AsBinary(@geometry)
Геометрии. ToText() AsText(@geometry)
Геометрии. Касания(g) Touches(@geometry, @g)
Геометрии. Union() UnaryUnion(@geometry)
Геометрии. Union(other) GUnion(@geometry, @other)
Геометрии. В(г) В(@geometry, @g)
geometryCollection[i] GeometryN(@geometryCollection, @i + 1)
geometryCollection.Count 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)
Точки. М 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(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(Property) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group. Select(x => x.Property)) Extent(Property) EF Core 7.0

Дополнительные ресурсы