Пространственные данные в поставщике 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 (геометрия) Добавлено в
EF.Functions.CurveToLine(geometry) @geometry.STCurveToLine() @geometry.STCurveToLine() EF Core 7.0
Геометрия.Площадь @geometry.STArea() @geometry.STArea()
Геометрия.AsBinary() @geometry.STAsBinary() @geometry.STAsBinary()
geometry.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)
geometry.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)
Геометрия.Дистанция(g) @geometry.STDistance(@g) @geometry.STDistance(@g)
Геометрия. Ограничивающая область @geometry.STEnvelope()
Метод geometry.EqualsTopologically(g) @geometry.STEquals(@g) @geometry.STEquals(@g)
Геометрии. GeometryType @geometry.STGeometryType() @geometry.STGeometryType()
Объект.Геометрия.GetGeometryN(n) @geometry.STGeometryN(@n + 1) @geometry.STGeometryN(@n + 1)
Геометрия.ВнутренняяТочка @geometry.STPointOnSurface()
Геометрии. Пересечение (другое) @geometry.STIntersection(@other) @geometry.STIntersection(@other)
Геометрия.Пересекается(g) @geometry.STIntersects(@g) @geometry.STIntersects(@g)
Геометрия.Пуста @geometry.STIsEmpty() @geometry.STIsEmpty()
Геометрия.IsSimple @geometry.STIsSimple()
Геометрия.IsValid @geometry.STIsValid() @geometry.STIsValid()
geometry.IsWithinDistance(geom, расстояние) @geometry.STDistance(@geom) <= @distance @geometry.STDistance(@geom) <= @distance
Геометрии. Длина @geometry.STLength() @geometry.STLength()
Геометрия.NumGeometries @geometry.STNumGeometries() @geometry.STNumGeometries()
Геометрия.NumPoints @geometry.STNumPoints() @geometry.STNumPoints()
ТипГеометрииOGC СЛУЧАЙ @geometry.STGeometryType() , КОГДА N'Point' THEN 1 ... КОНЕЦ СЛУЧАЙ @geometry.STGeometryType() , КОГДА N'Point' THEN 1 ... КОНЕЦ
Геометрии. Перекрытие(г) @geometry.STOverlaps(@g) @geometry.STOverlaps(@g)
Geometry.PointOnSurface @geometry.STPointOnSurface()
Геометрии. Отношение(g, пересечениеPattern) @geometry.STRelate(@g, @intersectionPattern)
Геометрия. SRID @geometry.STSrid @geometry.STSrid
Геометрия.СимметрическаяРазность(other) @geometry.STSymDifference(@other) @geometry.STSymDifference(@other)
Геометрия.ToBinary() @geometry.STAsBinary() @geometry.STAsBinary()
Геометрия.ToText() @geometry.AsTextZM() @geometry.AsTextZM()
geometry.Touches(g) @geometry.STTouches(@g)
Геометрия.Union(other) @geometry.STUnion(@other) @geometry.STUnion(@other)
Геометрия.Внутри(g) @geometry.STWithin(@g) @geometry.STWithin(@g)
geometryCollection[i] @geometryCollection.STGeometryN(@i + 1) @geometryCollection.STGeometryN(@i + 1)
geometryCollection.Число @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()
polygon.GetInteriorRingN(n) @polygon.RingN(@n + 2) @polygon.STInteriorRingN(@n + 1)
polygon.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(Свойство) EF Core 7.0
EnvelopeCombiner.CombineAsGeometry(group.Select(x => x.Property)) EnvelopeAggregate(Property) EF Core 7.0

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