Пространственные данные в поставщике 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 |