Пространственные данные в поставщике SQL Server EF Core
Эта страница содержит дополнительные сведения об использовании пространственных данных с поставщиком базы данных Microsoft SQL Server. Общие сведения об использовании пространственных данных в EF Core см. в основной документации по пространственным данным .
География или геометрия
По умолчанию пространственные свойства сопоставляются со geography
столбцами в SQL Server. Чтобы использовать geometry
, настройте тип столбца в модели.
Круги географических многоугольников
При использовании geography
типа столбца SQL Server накладывает дополнительные требования к внешнему кольцу (или оболочке) и внутренним кольцам (или отверстиям). Внешнее кольцо должно быть ориентировано на счетчик с часовой стрелкой и внутренние кольца по часовой стрелке. NetTopologySuite (NTS) проверяет это перед отправкой значений в базу данных.
FullGlobe
SQL Server имеет нестандартный тип геометрии для представления полного земного шара при использовании типа столбца geography
. Он также имеет способ представить многоугольники на основе полного земного шара (без внешнего кольца). Ни в чем из них не поддерживаются NTS.
Предупреждение
FullGlobe и многоугольники, основанные на нем, не поддерживаются NTS.
Кривые
Как упоминание в основной документации по пространственным данным, NTS в настоящее время не может представлять кривые. Это означает, что необходимо преобразовать значения CircularString, CompoundCurve и CurePolygon с помощью метода STCurveToLine перед их использованием в EF Core.
Предупреждение
CircularString, CompoundCurve и CurePolygon не поддерживаются NTS.
Сопоставления пространственных функций
В этой таблице показано, какие элементы NTS преобразуются в функции SQL. Обратите внимание, что переводы различаются в зависимости от того, имеет ли столбец тип географии или геометрии.
.NET | SQL (география) | SQL (geometry) | Добавлено в |
---|---|---|---|
EF. Functions.CurveToLine(geometry) | @geometry.STCurveToLine() | @geometry.STCurveToLine() | EF Core 7.0 |
Геометрии. Области | @geometry.STArea() | @geometry.STArea() | |
Геометрии. AsBinary() | @geometry.STAsBinary() | @geometry.STAsBinary() | |
Геометрии. AsText() | @geometry.AsTextZM() | @geometry.AsTextZM() | |
Геометрии. Границы | @geometry.STBoundary() | ||
Геометрии. Buffer(distance) | @geometry.STBuffer(@distance) | @geometry.STBuffer(@distance) | |
Геометрии. Центроид | @geometry.STCentroid() | ||
Геометрии. Contains(g) | @geometry.STContains(@g) | @geometry.STContains(@g) | |
Геометрии. ConvexHull() | @geometry.STConvexHull() | @geometry.STConvexHull() | |
Геометрии. Кресты(g) | @geometry.STCrosses(@g) | ||
Геометрии. Разница(другие) | @geometry.STDifference(@other) | @geometry.STDifference(@other) | |
Геометрии. Размер | @geometry.STDimension() | @geometry.STDimension() | |
Геометрии. Disjoint(g) | @geometry.STDisjoint(@g) | @geometry.STDisjoint(@g) | |
Геометрии. Distance(g) | @geometry.STDistance(@g) | @geometry.STDistance(@g) | |
Геометрии. Конверт | @geometry.STEnvelope() | ||
Геометрии. EqualsTopologically(g) | @geometry.STEquals(@g) | @geometry.STEquals(@g) | |
Геометрии. GeometryType | @geometry.STGeometryType() | @geometry.STGeometryType() | |
Геометрии. GetGeometryN(n) | @geometry.STGeometryN(@n + 1) | @geometry.STGeometryN(@n + 1) | |
Геометрии. InteriorPoint | @geometry.STPointOnSurface() | ||
Геометрии. Пересечение (другое) | @geometry.STIntersection(@other) | @geometry.STIntersection(@other) | |
Геометрии. Intersects(g) | @geometry.STIntersects(@g) | @geometry.STIntersects(@g) | |
Геометрии. Isempty | @geometry.STIsEmpty() | @geometry.STIsEmpty() | |
Геометрии. IsSimple | @geometry.STIsSimple() | ||
Геометрии. Isvalid | @geometry.STIsValid() | @geometry.STIsValid() | |
Геометрии. IsWithinDistance(geom, расстояние) | @geometry.STDistance(@geom)<= @distance | @geometry.STDistance(@geom)<= @distance | |
Геометрии. Длина | @geometry.STLength() | @geometry.STLength() | |
Геометрии. NumGeometries | @geometry.STNumGeometries() | @geometry.STNumGeometries() | |
Геометрии. NumPoints | @geometry.STNumPoints() | @geometry.STNumPoints() | |
Геометрии. OgcGeometryType | СЛУЧАЙ @geometry.STGeometryType() , КОГДА N'Point' THEN 1 ... КОНЕЦ | СЛУЧАЙ @geometry.STGeometryType() , КОГДА N'Point' THEN 1 ... КОНЕЦ | |
Геометрии. Перекрытие(г) | @geometry.STOverlaps(@g) | @geometry.STOverlaps(@g) | |
Геометрии. PointOnSurface | @geometry.STPointOnSurface() | ||
Геометрии. Отношение(g, пересечениеPattern) | @geometry.STRelate(@g, @intersectionPattern) | ||
Геометрии. SRID | @geometry.STSrid | @geometry.STSrid | |
Геометрии. СимметричнаяDifference(other) | @geometry.STSymDifference(@other) | @geometry.STSymDifference(@other) | |
Геометрии. ToBinary() | @geometry.STAsBinary() | @geometry.STAsBinary() | |
Геометрии. ToText() | @geometry.AsTextZM() | @geometry.AsTextZM() | |
Геометрии. Касания(g) | @geometry.STTouches(@g) | ||
Геометрии. Union(other) | @geometry.STUnion(@other) | @geometry.STUnion(@other) | |
Геометрии. В(г) | @geometry.STWithin(@g) | @geometry.STWithin(@g) | |
geometryCollection[i] | @geometryCollection.STGeometryN(@i + 1) | @geometryCollection.STGeometryN(@i + 1) | |
geometryCollection.Count | @geometryCollection.STNumGeometries() | @geometryCollection.STNumGeometries() | |
lineString.Count | @lineString.STNumPoints() | @lineString.STNumPoints() | |
lineString.EndPoint | @lineString.STEndPoint() | @lineString.STEndPoint() | |
lineString.GetPointN(n) | @lineString.STPointN(@n + 1) | @lineString.STPointN(@n + 1) | |
lineString.IsClosed | @lineString.STIsClosed() | @lineString.STIsClosed() | |
lineString.IsRing | @lineString.IsRing() | ||
lineString.StartPoint | @lineString.STStartPoint() | @lineString.STStartPoint() | |
multiLineString.IsClosed | @multiLineString.STIsClosed() | @multiLineString.STIsClosed() | |
Точки. М | @point.M | @point.M | |
Точки. X | @point.Long | @point.STX | |
Точки. Y | @point.Lat | @point.STY | |
Точки. Z | @point.Z | @point.Z | |
Полигона. Внешний ринг | @polygon.RingN(1) | @polygon.STExteriorRing() | |
Полигона. GetInteriorRingN(n) | @polygon.RingN(@n + 2) | @polygon.STInteriorRingN(@n + 1) | |
Полигона. NumInteriorRings | @polygon.NumRings() - 1 | @polygon.STNumInteriorRing() |
Агрегатные функции
.NET | SQL | Добавлено в |
---|---|---|
GeometryCombiner.Combine(group. Select(x => x.Property)) | CollectionAggregate(Property) | EF Core 7.0 |
ConvexHull.Create(group. Select(x => x.Property)) | ConvexHullAggregate(Property) | EF Core 7.0 |
UnaryUnionOp.Union(group. Select(x => x.Property)) | UnionAggregate(Property) | EF Core 7.0 |
EnvelopeCombiner.CombineAsGeometry(group. Select(x => x.Property)) | EnvelopeAggregate(Property) | EF Core 7.0 |