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


Пространственные данные в поставщике 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) несовместимы со стандартным пакетом 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вам также потребуется задать переменную среды перед запуском приложения, чтобы она использовала версию SQLite Homebrew. В Visual Studio для Mac этот параметр можно задать в разделе Параметры проекта >> запустить конфигурации >> по умолчанию

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

Настройка SRID

В SpatiaLite для каждого столбца необходимо указывать SRID. SRID по умолчанию — 0. Укажите другой 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.

.СЕТЬ SQL
геометрия. Площадь Область(@geometry)
геометрия. AsBinary() AsBinary(@geometry)
геометрия.AsText() AsText(@geometry)
геометрия. Граница Граница(@geometry)
геометрия. Буфер(расстояние) Buffer(@geometry, @distance)
геометрия.Buffer(distance, quadrantSegments) Buffer(@geometry, @distance, @quadrantSegments)
геометрия. Центроид Centroid(@geometry)
геометрия.Содержит(g) Содержит(@geometry, @g)
геометрия. ConvexHull() ConvexHull(@geometry)
геометрия. CoveredBy(g) CoveredBy(@geometry, @g)
геометрия. Обложки(g) Обложки(@geometry, @g)
геометрия.Пересечения(g) Кресты(@geometry, @g)
геометрия. Разница(другие) Разница(@geometry, @other)
геометрия. Измерение Измерение(@geometry)
геометрия.Непересекающееся(g) Disjoint(@geometry, @g)
геометрия.Дистанция(g) Расстояние(@geometry, @g)
геометрия. Конверт Конверт(@geometry)
геометрия. EqualsTopologically(g) Equals(@geometry, @g)
геометрия.ТипГеометрии ТипГеометрии(@geometry)
геометрия.GetGeometryN(n) GeometryN(@geometry, @n + 1)
геометрия. InteriorPoint PointOnSurface(@geometry)
геометрия. Пересечение (другое) Пересечение(@geometry, @other)
геометрия.Пересечения(g) Пересекаются(@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(@geometry)
геометрия. Отношение(g, пересечениеPattern) Связь(@geometry, @g, @intersectionPattern)
геометрия. Обратный() ST_Reverse(@geometry)
геометрия. SRID SRID(@geometry)
геометрия.СимметрическаяРазность(other) SymDifference(@geometry, @other)
геометрия. ToBinary() AsBinary(@geometry)
геометрия. ToText() AsText(@geometry)
geometry.Соприкасается(g) Касания(@geometry, @g)
геометрия. Union() UnaryUnion(@geometry)
геометрия.Объединение(другой) GUnion(@geometry, @other)
геометрия.Внутри(г) Внутри(@geometry, @g)
geometryCollection[i] GeometryN(@geometryCollection, @i + 1)
geometryCollection.Count NumGeometries(@geometryCollection)
lineString.Count NumPoints(@lineString)
конечнаяТочкаЛинейнойСтроки КонечнаяТочка(@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 M(@point)
точка.X X(@point)
точка. Y Y(@point)
точка Z Z(@point)
многоугольник.ВнешнийКонтур Внешний Ринг(@polygon)
многоугольник.GetInteriorRingN(n) InteriorRingN(@polygon, @n + 1)
многоугольник. NumInteriorRings NumInteriorRing(@polygon)

Агрегатные функции

.СЕТЬ SQL Добавлено в
GeometryCombiner.Combine(group.Select(x => x.Property)) Collect(Property) EF Core 7.0
ConvexHull.Create(group. Select(x => x.Property)) ConvexHull(Collect(Свойство)) EF Core 7.0
UnaryUnionOp.Union(group.Select(x => x.Property)) GUnion(Property) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group. Select(x => x.Property)) Объем(Свойство) EF Core 7.0

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