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

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