Создание, конструирование и запрос экземпляров geometry
Планарный пространственный тип данных geometry представляет данные в евклидовой (плоской) системе координат. В SQL Server этот тип реализован как тип данных среды CLR.
Тип geometry является стандартным и доступен в каждой базе данных. В таблице можно создать столбцы типа geometry и обращаться с данными geometry так же, как и с данными других типов среды CLR.
Тип данных geometry (плоский), поддерживаемый SQL Server, соответствует спецификации Open Geospatial Consortium (OGC) «Простые объекты для SQL» версии 1.1.0.
Дополнительные сведения о спецификациях OGC см. в одном из следующих источников:
Спецификации OGC, простой доступ к функциям, часть 1 — общая архитектура
Спецификации OGC, простой доступ к функциям, часть 2 — параметры SQL
Служба SQL Server поддерживает подмножество существующего стандарта GML 3.1, определенного по следующей схеме: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.
В этом разделе
Создание или построение нового экземпляра геометрического объекта
Создание нового экземпляра геометрического объекта из существующего экземпляра
Построение экземпляра геометрического объекта на основе входных данных в формате Well-Known Text
Построение экземпляра геометрического объекта на основе входных данных в формате Well-Known Binary Input
Построение экземпляра геометрического объекта на основе входных данных в формате GML Text
Получение данных в формате Well-Known Text и Well-Known Binary из геометрического экземпляра
Запрос свойств и режимов геометрических объектов
Допустимость, тип экземпляра и сведения GeometryCollection
Число точек
Измерение
Пустой
Граница, внутренняя и внешняя область
Огибающая
Замыкание
Идентификатор пространственной ссылки (SRID)
Определение связей между геометрическими объектами
Значение по умолчанию, равное 0, для идентификаторов SRID экземпляров геометрических объектов
Примеры
Создание или построение нового экземпляра геометрического объекта
Создание нового экземпляра геометрического объекта из существующего экземпляра
Тип данных geometry содержит множество встроенных методов, с помощью которых можно создавать новые объекты geometry на основе существующих.
Создание буфера вокруг геометрического объекта
STBuffer (тип данных geometry)Создание упрощенной версии геометрического объекта
Reduce (тип данных geometry)Создание выпуклой оболочки геометрического объекта
STConvexHull (тип данных geometry)Создание геометрического объекта на основе пересечения двух геометрических объектов
STIntersection (тип данных geometry)Создание геометрического объекта основе объединения двух геометрических объектов
STUnion (тип данных geometry)Создание геометрического объекта на основе точек, в которых один геометрический объект не перекрывается другими
STDifference (тип данных geometry)Создание геометрического объекта на основе точек, в которых два геометрических объекта не перекрываются
STSymDifference (тип данных geometry)Создание произвольного экземпляра Point, принадлежащего существующему геометрическому объекту
STPointOnSurface (тип данных geometry)
[В НАЧАЛО]
Построение экземпляра геометрического объекта на основе входных данных в формате Well-Known Text
В типе данных geometry предусмотрено несколько встроенных методов, позволяющих создать экземпляр типа geometry на основе представления WKT спецификации консорциума OGC. Стандарт WKT представляет собой текстовую строку, позволяющую осуществлять обмен геометрическими данными в текстовой форме.
Создание экземпляра геометрического объекта любого типа на основе входных данных формата WKT
STGeomFromText (тип данных 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)
[В НАЧАЛО]
Построение экземпляра геометрического объекта на основе входных данных в формате Well-Known Binary Input
WKB представляет собой описанный консорциумом OGC двоичный формат, позволяющий осуществлять обмен данными типа geometry между клиентскими приложениями и базой данных 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 Text
Тип данных geometry предоставляет метод, формирующий экземпляр geometry на основе GML, XML-представления геометрических объектов. SQL Server поддерживает подмножество GML.
- Создание экземпляра геометрического объекта любого типа на основе входных данных формата GML
GeomFromGML (тип данных geometry)
[В НАЧАЛО]
Получение данных в формате Well-Known Text и Well-Known Binary из геометрического экземпляра
Можно использовать следующие методы для получения данных экземпляра geometry в формате WKT или формате WKB:
Получение WKT-представления экземпляра геометрического объекта
STAsText (тип данных geometry)Получение WKT-представления экземпляра геометрического объекта, включая значения Z и M
AsTextZM (тип данных geometry)Получение WKB-представления экземпляра геометрического объекта
STAsBinary (тип данных geometry)Получение GML-представления экземпляра геометрического объекта
AsGml (тип данных geometry)
[В НАЧАЛО]
Запрос свойств и режимов геометрических объектов
Все экземпляры 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Произвольная точка, принадлежащая экземпляру
STPointOnSurfaceПолучение начальной точки экземпляра
STStartPointПолучение конечной точки экземпляра
STEndpointКоордината по оси X экземпляра Point
STX (тип данных geometry)Координата по оси Y экземпляра Point
STYОпределение геометрического центра экземпляра Polygon, CurvePolygon или MultiPolygon
STCentroid
[В НАЧАЛО]
Измерение
Непустой объект geometry может иметь 0, 1 или 2 измерения. Объекты geometries, имеющие 0 измерений, например Point и MultiPoint, не имеют ни длины, ни площади. Одномерные объекты, такие как LineString, CircularString, CompoundCurve и MultiLineString, имеют длину. Двумерные объекты, такие как Polygon, CurvePolygon и MultiPolygon, имеют длину и площадь. Пустые экземпляры имеют измерение -1, а экземпляр GeometryCollection имеет площадь, зависящую от типов его содержимого.
Получение измерения экземпляра
STDimensionПолучение длины экземпляра
STLengthПолучение площади экземпляра
STArea
[В НАЧАЛО]
Пустой
Пустым называется экземпляр объекта geometry, не содержащий ни одной точки. Длина пустых экземпляров LineString, CircularString, CompoundCurve и MultiLineString равна нулю. Площадь пустых экземпляров Polygon, CurvePolygon и MultiPolygon равна нулю.
- Проверка, является ли экземпляр пустым
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();
Граница экземпляра 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 , которая также называется ограничивающим прямоугольником, представляет собой выровненный по осям прямоугольник, построенный на основе максимальных и минимальных координат (X,Y) экземпляра.
- Получение огибающей экземпляра
STEnvelope
[В НАЧАЛО]
Замыкание
Замкнутый экземпляр geometry — это фигура, начальная и конечная точки которой совпадают. Экземпляры Polygon считаются замкнутыми. Экземпляры Point не замкнуты.
Кольцо — это простой замкнутый экземпляр LineString.
Определение, является ли экземпляр замкнутым
STIsClosedОпределение, является ли экземпляр кольцом
STIsRingПолучение внешнего кольца экземпляра Polygon
STExteriorRingПолучение числа внутренних колец в экземпляре Polygon
STNumInteriorRingПолучение конкретного внутреннего кольца в экземпляре Polygon
STInteriorRingN
[В НАЧАЛО]
Идентификатор пространственной ссылки (SRID)
Идентификатор пространственной ссылки (SRID) — это идентификатор, указывающий, в какой системе координат представлен экземпляр geometry. Два экземпляра с разными идентификаторами SRID несравнимы.
- Задание или возврат идентификатора SRID экземпляра
STSrid
Это свойство можно изменять.
[В НАЧАЛО]
Определение связей между геометрическими объектами
Тип данных geometry предоставляет множество встроенных методов, с помощью которых можно определить связи между двумя объектами типа geometry.
Определение возможного наличия одинакового набора точек в двух объектах
STEqualsОпределение отсутствия перекрытия двух объектов
STDisjointОпределение пересечения двух объектов
STIntersectsОпределение соприкосновений двух экземпляров
STTouchesОпределение перекрещивания двух экземпляров
STOverlapsОпределение пересечения двух экземпляров
STCrossesОпределение нахождения одного экземпляра в другом
STWithinОпределение содержания одного экземпляра другим
STContainsОпределение перекрещивания одного экземпляра с другим
STOverlapsОпределение пространственной связи двух экземпляров
STRelateОпределение кратчайшего пути между точками двух геометрических экземпляров
STDistance
[В НАЧАЛО]
Значение по умолчанию, равное 0, для идентификаторов SRID экземпляров геометрических объектов
Идентификатор SRID для экземпляров geometry в SQL Server имеет значение по умолчанию, равное 0. При работе с пространственными данными типа geometry конкретный идентификатор SRID пространственного экземпляра для выполнения вычислений не требуется. Таким образом, экземпляры могут находиться в неопределенном двумерном пространстве. Чтобы указать неопределенное двумерное пространство в вычислениях методов работы с типом данных geometry, в компоненте Компонент SQL Server Database Engine используется значение SRID, равное 0.
Примеры
В следующих двух примерах иллюстрируется добавление и запрос геометрических данных.
В первом примере создается таблица со столбцом идентификаторов и столбцом 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();
[В НАЧАЛО]