Типы пространственных данных

Существует два типа пространственных данных. Тип данных geometry используется для планарных или евклидовых данных. Тип данных geometry соответствует спецификации консорциума OGC «Simple Features for SQL» версии 1.1.0.

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

Типы данных geometry и geography поддерживают одиннадцать пространственных объектов или типов экземпляров. Однако только семь из этих типов экземпляров являются инстанциируемыми; такие экземпляры можно создавать в базе данных и работать с ними. Эти экземпляры наследуют некоторые свойства от родительских типов данных, которые позволяют различать их как Points, LineStrings, Polygons или несколько экземпляров geometry или geography в GeometryCollection.

На рисунке ниже изображена иерархия geometry, на которой основаны типы данных geometry и geography. Инстанциируемые типы geometry и geography выделены синим.

Иерархия типа geometry

Как показано на рисунке, семью инстанциируемыми типами geometry и geography являются Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon и GeometryCollection. Типы geometry и geography могут распознавать определенный экземпляр, если он имеет правильный формат, даже в том случае, если он не был определен явно. Например, если определить экземпляр Point явно с помощью метода STPointFromText(), то типы geometry и geography будут распознавать экземпляр как Point, если входные данные метода имели правильный формат. Если определить такой же экземпляр с помощью метода STGeomFromText(), то оба типа данных geometry и geography будут распознавать экземпляр как Point.

Дополнительные сведения об этих экземплярах см. в следующих разделах:

Различие двух типов данных

Два типа пространственных данных часто демонстрируют одинаковое поведение, однако у них имеется ряд ключевых различий в способе хранения и управления данными.

Как определяются границы соединения

Определяющими данными для типов LineString и Polygon могут быть только вершины. Границей соединения между двумя вершинами в типе geometry является прямая линия. Однако границей соединения между двумя вершинами в типе geography является короткая большая эллиптическая кривая, проложенная между вершинами. Большой эллипс представляет собой пересечение эллипсоида с плоскостью, проходящей через его центр, а большая эллиптическая кривая представляет собой сегмент кривой на большом эллипсе.

Измерения в пространственных типах данных

В планарной модели (или модели плоской Земли) измерение расстояний и площадей проводятся в таких же единицах измерения, в каких представляются координаты. При использовании типа данных geometry расстояние между точками (2, 2) и (5, 6) составляет 5 единиц, независимо от используемых единиц.

В эллиптической модели, или модели круглой Земли, координаты указываются в градусах долготы и широты. Однако длины и площади обычно измеряются в метрах и квадратных метрах, хотя измерения могут зависеть от идентификатора пространственной ссылки (SRID) экземпляра geography. Самой распространенной единицей измерения типа данных geography является метр.

Ориентация пространственных объектов

В планарной системе ориентация кольца многоугольника является несущественным фактором. Например, многоугольник ((0, 0), (10, 0), (0, 20), (0, 0)) идентичен многоугольнику ((0, 0), (0, 20), (10, 0), (0, 0)). Спецификация «Simple Features for SQL» консорциума OGC не определяет положение кольца, а SQL Server его не учитывает.

В эллиптической модели без указания ориентации многоугольник не определен или является неоднозначным. Например, описывает ли кольцо вокруг экватора северное или южное полушарие? При использовании типа данных geography для хранения пространственного экземпляра необходимо указать ориентацию кольца и точно описать расположение экземпляра.

В SQL Server 2008 действуют следующие ограничения на использование типа данных geography.

  • Любой экземпляр geography должен лежать в пределах одного полушария. Не допускается сохранение пространственных объектов больше размера полушария.

  • Любой экземпляр geography в представлении консорциума OGC Well-Known Text (WKT) или Well-Known Binary (WKB), порождающий объект больше полушария, приводит к возникновению исключения ArgumentException.

  • Методы типа данных geography, требующие указания двух экземпляров geography, такие как STIntersection(), STUnion(), STDifference() и STSymDifference(), возвратят NULL, если результаты методов не умещаются в одном полушарии. STBuffer() также возвращает NULL, если выходные данные не умещаются в одном полушарии.

Внешнее и внутреннее кольцо не важны для типа данных geography

В спецификации «Simple Features for SQL» консорциума OGC обсуждаются внешние и внутренние кольца, но их различие не имеет значения для типа данных SQL Servergeography: любое кольцо многоугольника можно считать внешним кольцом.

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

Спецификации OGC, простой доступ к функциям, часть 1 — общая архитектура

Спецификации OGC, простой доступ к функциям, часть 2 — параметры SQL