Поделиться через


Создание, создание, создание и запрос геометрических экземпляров

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL в хранилище Microsoft Fabric в базе данных SQL Microsoft Fabric в Microsoft Fabric

Планарный пространственный тип данных geometryпредставляет данные в евклидовой (плоской) системе координат. Этот тип реализуется как тип данных среды CLR в SQL Server.

Тип geometry является стандартным и доступен в каждой базе данных. В таблице можно создать столбцы типа geometry и обращаться с данными geometry так же, как и с данными других типов среды CLR.

Тип данных геометрии (planar), поддерживаемый SQL Server, соответствует простым функциям открытого геопространственного консорциума (OGC) для спецификации SQL версии 1.1.0.

Дополнительные сведения о спецификациях OGC см. в одном из следующих источников:

SQL Server поддерживает подмножество существующего стандарта GML 3.1, определенного в следующей схеме. https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd

Создание или создание нового экземпляра геометрии

Создание нового геометрического экземпляра из существующего экземпляра

Тип данных geometry предоставляет многочисленные встроенные методы создания новых экземпляров geometry на основе существующих экземпляров.

Создание буфера вокруг геометрического объекта
STBuffer (тип данных geometry)

BufferWithTolerance (тип данных geometry)

Создание упрощенной версии геометрического объекта
Reduce (тип данных geometry)

Создание выпуклой оболочки геометрического объекта
STConvexHull (тип данных geometry)

Создание геометрического объекта на основе пересечения двух геометрических объектов
STIntersection (тип данных geometry)

Создание геометрического объекта основе объединения двух геометрических объектов
STUnion (тип данных geometry)

Создание геометрического объекта на основе точек, в которых один геометрический объект не перекрывается другими
STDifference (тип данных geometry)

Создание геометрического объекта на основе точек, в которых два геометрических объекта не перекрываются
STSymDifference (тип данных geometry)

Создание произвольного экземпляра Point, принадлежащего существующему геометрическому объекту
STPointOnSurface (тип данных geometry)

Создание геометрического экземпляра из хорошо известных текстовых входных данных

В типе данных geometry предусмотрено несколько встроенных методов, позволяющих создать экземпляр типа geometry на основе представления WKT спецификации консорциума OGC. Стандарт WKT представляет собой текстовую строку, позволяющую осуществлять обмен геометрическими данными в текстовой форме.

Создание экземпляра геометрического объекта любого типа на основе входных данных формата WKT
STGeomFromText (тип данных geometry)

Parse (тип данных geometry)

Создание геометрического объекта Point на основе входных данных формата WKT
STPointFromText (тип данных geometry)

Создание геометрического объекта MultiPoint на основе входных данных формата WKT
STMPointFromText (тип данных geometry)

Создание геометрического объекта LineString на основе входных данных формата WKT
STLineFromText (тип данных geometry)

Создание геометрического объекта MultiLineString на основе входных данных формата WKT
STMLineFromText (тип данных geometry)

Создание геометрического объекта Polygon на основе входных данных формата WKT
STPolyFromText (тип данных geometry)

Создание геометрического объекта MultiPolygon на основе входных данных формата WKT
STMPolyFromText (тип данных geometry)

Создание геометрического объекта GeometryCollection на основе входных данных формата WKT
STGeomCollFromText (тип данных geometry)

Создание геометрического экземпляра из известных двоичных входных данных

WKB — это двоичный формат, заданный открытым геопространственный консорциумом (OGC), который позволяет обмениваться данными геометрии между клиентским приложением и базой данных SQL. Следующие функции допускают создание геометрических объектов на основе входных данных формата WKB.

Создание экземпляра геометрического объекта любого типа на основе входных данных формата WKB
STGeomFromWKB (тип данных geometry)

Создание геометрического объекта Point на основе входных данных формата WKB
STPointFromWKB (тип данных geometry)

Создание геометрического объекта MultiPoint на основе входных данных формата WKB
STMPointFromWKB (тип данных geometry)

Создание геометрического объекта LineString на основе входных данных формата WKB
STLineFromWKB (тип данных geometry)

Создание геометрического объекта MultiLineString на основе входных данных формата WKB
STMLineFromWKB (тип данных geometry)

Создание геометрического объекта Polygon на основе входных данных формата WKB
STPolyFromWKB (тип данных geometry)

Создание геометрического объекта MultiPolygon на основе входных данных формата WKB
STMPolyFromWKB (тип данных geometry)

Создание геометрического объекта GeometryCollection на основе входных данных формата WKB
STGeomCollFromWKB (тип данных geometry)

Создание геометрического экземпляра из ввода текста GML

Тип данных geometry предоставляет метод, формирующий экземпляр geometry на основе GML, XML-представления геометрических объектов. SQL Server поддерживает подмножество GML.

Создание экземпляра геометрического объекта любого типа на основе входных данных формата GML
GeomFromGML (тип данных geometry)

Возврат известного текста и известного двоичного файла из геометрического экземпляра

Можно использовать следующие методы для получения данных экземпляра geometry в формате WKT или формате WKB:

Получение WKT-представления экземпляра геометрического объекта
STAsText (тип данных geometry)

ToString (тип данных geometry)

Получение WKT-представления экземпляра геометрического объекта, включая значения Z и M
AsTextZM (тип данных geometry)

Получение WKB-представления экземпляра геометрического объекта
STAsBinary (тип данных geometry)

Получение GML-представления экземпляра геометрического объекта
AsGml (тип данных geometry)

Запрос свойств и поведения экземпляров геометрии

Все экземпляры геометрии имеют ряд свойств, которые можно получить с помощью методов, предоставляемых SQL Server. В следующих разделах описаны свойства и поведение геометрических типов данных, а также методы для запросов к ним.

Сведения о допустимости, типе экземпляра и geometryCollection

Как только экземпляр geometry сформирован, при помощи следующих методов можно определить правильность его формата, получить тип этого экземпляра или, в случае экземпляра-коллекции, получить определенный экземпляр geometry .

Получение типа геометрического объекта
STGeometryType (тип данных geometry)

Определение принадлежности геометрического объекта к заданному типу
InstanceOf (тип данных geometry)

Проверка соответствия формата экземпляра геометрического объекта его типу
STIsValid (тип данных geometry)

Преобразование экземпляра геометрического объекта в экземпляр геометрический объект правильного формата с каким-либо типом экземпляра
MakeValid (тип данных geometry)

Получение количества геометрических экземпляров в экземпляре геометрической коллекции
STNumGeometries (тип данных geometry)

Получение определенного геометрического объекта из экземпляра геометрической коллекции
STGeometryN (тип данных geometry) STGeometryN (тип данных geometry)

Количество точек

Все непустые экземпляры geometry состоят из точек. Эти точки представляют координаты X и Y на плоскости, где вычерчиваются геометрические объекты. geometry предоставляет многочисленные встроенные методы для создания запросов, адресованных точкам экземпляра.

Получение числа точек, образующих экземпляр
STNumPoints (тип данных geometry)

Получение выбранной точки в экземпляре
STPointN (тип данных geometry)

Произвольная точка, принадлежащая экземпляру
STPointOnSurface (тип данных geometry)

Получение начальной точки экземпляра
STStartPoint (тип данных geometry)

Возврат конечной точки экземпляра
STEndpoint (тип данных geometry)

Координата по оси X экземпляра Point
STX (тип данных geometry)

Координата по оси Y экземпляра Point
STY (тип данных geometry)

Определение геометрического центра экземпляра Polygon, CurvePolygon или MultiPolygon
STCentroid (тип данных geometry)

Измерение

Непустой объект geometry может иметь 0, 1 или 2 измерения. Объекты geometries, имеющие 0 измерений, например Point и MultiPoint, не имеют ни длины, ни площади. Одномерные объекты, такие как LineString, CircularString, CompoundCurveи MultiLineString, имеют длину. Двухмерные объекты, такие как Polygon, CurvePolygonи MultiPolygon, имеют длину и площадь. Пустые объекты имеют измерение -1, а объект GeometryCollection имеет площадь, зависящую от типов его содержимого.

Получение измерения экземпляра
STDimension (тип данных geometry)

Получение длины экземпляра
STLength (тип данных geometry)

Получение площади экземпляра
STArea (тип данных geometry)

Нет значения

Пустой объект geometry не имеет никаких точек. Длина пустых экземпляров LineString, CircularString, CompoundCurveи MultiLineString равна нулю. Площадь пустых экземпляров Polygon, CurvePolygonи MultiPolygon равна нулю.

Проверка, является ли экземпляр пустым
STIsEmpty (тип данных geometry).

Простая

Чтобы объект geometry экземпляра был простым, он должен удовлетворять двум следующим требованиям.

  • Каждая фигура экземпляра не должна пересекать саму себя, за исключением конечных точек.

  • Никакие две фигуры экземпляра не могут пересекаться в точке, не находящейся на их границах.

Примечание.

Пустые геометрические фигуры всегда являются простыми.

Определение, является ли экземпляр простым
STIsSimple (тип данных geometry).

Граница, интерьер и внешний вид

Внутренняя область экземпляра geometry — это пространство, занимаемое экземпляром, а внешняя область — это пространство, не занимаемое им.

Граница определяется в OGC следующим образом:

  • ЭкземплярыPoint и MultiPoint не имеют границы.

  • ГраницыLineString и MultiLineString boundaries are formed by the start points и end points, removing those that occur an even number of times.

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');  
SELECT @g.STBoundary().ToString();  

Граница экземпляра Polygon или MultiPolygon — это совокупность его колец.

DECLARE @g geometry;  
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');  
SELECT @g.STBoundary().ToString();  

Получение границы экземпляра
STBoundary (тип данных geometry)

Огибающая

Огибающая экземпляра geometry , которая также называется ограничивающим прямоугольником, представляет собой выровненный по осям прямоугольник, который построен на основе минимальных и максимальных координат (X,Y) объекта.

Получение огибающей экземпляра
STEnvelope (тип данных geometry)

Закрытие

Замкнутый объект geometry — это фигура, начальная и конечная точки которой совпадают. ЭкземплярыPolygon считаются замкнутыми. ЭкземплярыPoint не замкнуты.

Кольцо — это простой замкнутый экземпляр LineString .

Определение, является ли экземпляр замкнутым
STIsClosed (тип данных geometry)

Определение, является ли экземпляр кольцом
STIsRing (тип данных geometry)

Получение внешнего кольца экземпляра Polygon
STExteriorRing (тип данных geometry)

Получение числа внутренних колец в экземпляре Polygon
STNumInteriorRing (тип данных geometry)

Получение конкретного внутреннего кольца в экземпляре Polygon
STInteriorRingN (тип данных geometry)

Идентификатор пространственной ссылки (SRID)

Идентификатор пространственной ссылки (SRID) — это идентификатор, указывающий, в какой системе координат представлен объект geometry . Два экземпляра с разными идентификаторами SRID несравнимы.

Задание или возврат идентификатора SRID экземпляра
STSrid (тип данных geometry)

Примечание.

Это свойство можно изменять.

Определение связей между геометрическими экземплярами

Тип данных geometry предоставляет множество встроенных методов, с помощью которых можно определить связи между двумя объектами типа geometry .

Определение возможного наличия одинакового набора точек в двух объектах
STEquals (тип данных geometry)

Определение отсутствия перекрытия двух объектов
STDisjoint (тип данных geometry)

Определение пересечения двух объектов
STIntersects (тип данных geometry)

Определение соприкосновений двух экземпляров
STTouches (тип данных geometry)

Определение перекрещивания двух экземпляров
STOverlaps (тип данных geometry)

Определение пересечения двух экземпляров
STCrosses (тип данных geometry)

Определение нахождения одного экземпляра в другом
STWithin (тип данных geometry)

Определение содержания одного экземпляра другим
STContains (тип данных geometry)

Определение перекрещивания одного экземпляра с другим
STOverlaps (тип данных geometry)

Определение пространственной связи двух экземпляров
STRelate (тип данных geometry)

Определение кратчайшего пути между точками двух геометрических экземпляров
STDistance (тип данных geometry)

Экземпляры геометрии по умолчанию равны нулю SRID

SRID по умолчанию для геометрических экземпляров в SQL Server 0. При работе с пространственными данными типа geometry конкретный идентификатор SRID пространственного экземпляра для выполнения вычислений не требуется. Таким образом, экземпляры могут находиться в неопределенном двумерном пространстве. Чтобы указать неопределенное планарное пространство в вычислениях методов геометрического типа данных, sql Server ядро СУБД использует SRID0.

Замечания

Геометрические и географические типы нельзя использовать в качестве столбцов таблицы в конечной точке аналитики SQL в Microsoft Fabric или хранилище в Microsoft Fabric.

Примеры

В следующих двух примерах иллюстрируется добавление и запрос геометрических данных.

Пример А.

В этом примере создается таблица со столбцом идентификаторов и столбцом GeomCol1 типа geometry. Третий столбец обрабатывает столбец geometry для представления в формате известного текста (WKT) OGC, используя метод STAsText() . Затем вставляются две строки: одна строка содержит объект LineString типа geometry, а другая — объект Polygon .

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
DROP TABLE dbo.SpatialTable;  
GO  

CREATE TABLE SpatialTable   
  ( id int IDENTITY (1,1),  
    GeomCol1 geometry,   
    GeomCol2 AS GeomCol1.STAsText() 
  );  
GO  

INSERT INTO SpatialTable (GeomCol1)  
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));  

INSERT INTO SpatialTable (GeomCol1)  
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));  
GO  

Пример Б.

В этом примере метод STIntersection() используется для получения точек, в которых пересекаются два вставленных ранее объекта geometry.

DECLARE @geom1 geometry;  
DECLARE @geom2 geometry;  
DECLARE @result geometry;  

SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;  
SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;  
SELECT @result = @geom1.STIntersection(@geom2);  
SELECT @result.STAsText();