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


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

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

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

Тип geometry данных (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)

Создание упрощенной версии геометрии
Уменьшить (тип данных geometry)

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

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

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

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

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

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

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

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

Создать объект геометрии любого типа из данных WKT
STGeomFromText (тип данных geometry)

Синтаксический анализ (тип данных geometry)

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

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

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

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

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

Создание экземпляра geometry MultiPolygon из входных данных WKT
STMPolyFromText (тип данных geometry)

Создание экземпляра geometry GeometryCollection из входных данных WKT
STGeomCollFromText (тип данных 'geometry')

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

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

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

Создание экземпляра точки геометрии из входных данных WKB
STPointFromWKB (тип данных geometry)

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

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

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

Создание экземпляра геометрического многоугольника из входных данных WKB
STPolyFromWKB (тип данных Геометрия)

Создание экземпляра geometry MultiPolygon из входных данных WKB
STMPolyFromWKB (тип данных геометрия)

Создание экземпляра geometry GeometryCollection из входных данных WKB
STGeomCollFromWKB (тип данных geometry)

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

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

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

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

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

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

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

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

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

Возврат представления GML экземпляра геометрии
AsGml (тип данных геометрия)

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

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

Сведения о допустимости, типе экземпляра и информации о коллекции геометрий.

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

Для возврата типа экземпляра геометрии
STGeometryType (тип данных Geometry)

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

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

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

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

Чтобы вернуть определенную геометрию в объекте коллекции геометрий
STGeometryN (тип данных geometry)STGeometryN (тип данных geometry)

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

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

Для возвращения количества точек, составляющих инстанцию
STNumPoints (тип данных geometry)

Вернуться к конкретной точке в экземпляре
STPointN

Вернуть произвольную точку, лежащую на экземпляре
STPointOnSurface

Возврат начальной точки экземпляра
STStartPoint

Вернуть конечную точку экземпляра
STEndpoint

Чтобы вернуть X-координату экземпляра точки
STX (тип данных Geometry)

Для возврата Y-координаты объекта Point
ЯЧМЕНЬ

Чтобы вернуть геометрический центр экземпляра Polygon, CurvePolygon или MultiPolygon
STCentroid

Размерность

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

Вернуть размерность экземпляра
STDimension

Чтобы вернуть длину экземпляра
STLength

Вычисление площади экземпляра
STArea

Пусто

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

Определение того, является ли экземпляр пустым
STIsEmpty.

Простой

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

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

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

Замечание

Пустые геометрии всегда просты.

Чтобы определить, является ли экземпляр простым
STIsSimple.

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

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

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

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

  • LineString и MultiLineString границы формируются начальными и конечными точками, удаляя те, которые встречаются чётное число раз.

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

Граница экземпляра PolygonMultiPolygon — это набор его кругов.

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();  

Чтобы вернуть границу экземпляра
Граница ST

Конверт

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

Вернуть конверт экземпляра
STEnvelope

Замыкание

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

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

Чтобы определить, закрыт ли экземпляр
STIsClosed

Определение того, является ли экземпляр кольцом
STIsRing

Чтобы вернуть внешнее кольцо экземпляра Polygon
STExteriorRing

Для возврата количества внутренних колец многоугольника
STNumInteriorRing

Возврат указанного внутреннего кольца многоугольника
STInteriorRingN

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

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

Установка или возврат SRID экземпляра
STSrid

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

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

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

Определение того, являются ли два экземпляра одинаковым набором точек
STEquals

Определение того, являются ли два экземпляра несвязанными
STDisjoint

Чтобы определить, пересекаются ли два объекта
STIntersects

Чтобы определить, касаются ли два экземпляра
STTouches

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

Чтобы определить, пересекаются ли два объекта
STCrosses

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

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

Определить, перекрывается ли один экземпляр другим
STOverlaps

Определение того, связаны ли два экземпляра пространственно
STRelate

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

Объекты геометрии имеют значение по умолчанию нулевой SRID

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

Примеры

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

  • В первом примере создается таблица со столбцом идентификатора и столбцом geometryGeomCol1. Третий столбец преобразует столбец geometry в его текстовое представление (WKT) Открытого геопространственного консорциума (OGC) Well-Known и использует метод 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();  
    

См. также

Пространственные данные (SQL Server)