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


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

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

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

Тип данных geometry (плоский), поддерживаемый SQL Server, соответствует спецификации Open Geospatial Consortium (OGC) «Простые объекты для SQL» версии 1.1.0.

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

Служба 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 на основе существующих.

[В НАЧАЛО]

Построение экземпляра геометрического объекта на основе входных данных в формате Well-Known Text

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

[В НАЧАЛО]

Построение экземпляра геометрического объекта на основе входных данных в формате Well-Known Binary Input

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

[В НАЧАЛО]

Построение экземпляра геометрического объекта на основе входных данных в формате GML Text

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

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

[В НАЧАЛО]

Получение данных в формате Well-Known Text и Well-Known Binary из геометрического экземпляра

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

[В НАЧАЛО]

Запрос свойств и режимов геометрических объектов

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

Допустимость, тип экземпляра и сведения GeometryCollection

Как только экземпляр geometry сформирован, при помощи следующих методов можно определить правильность его формата, получить тип этого экземпляра или, в случае экземпляра-коллекции, получить определенный экземпляр 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();
    

[В НАЧАЛО]

См. также

Основные понятия

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