Пространственные данные в поставщике SQLite EF Core
Эта страница содержит дополнительные сведения об использовании пространственных данных с поставщиком базы данных SQLite. Общие сведения об использовании пространственных данных в EF Core см. в основной документации по пространственным данным .
В 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
В SpatiaLite столбцы должны указывать SRID для каждого столбца. По умолчанию используется 0
SRID. Укажите другой 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 |
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: