Что такое тип хранения ST_Geometry?

Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например улицы, земельные участки, достопримечательности. Он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных в соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium, Inc. (OGC). Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Оно было разработано для эффективного использования ресурсов баз данных; для совместимости с объектами баз данных, такими, как реплики и разделы; и для предоставления быстрого доступа к пространственным данным.

ST_Geometry является абстрактным невызываемым суперклассом. Однако его подклассы могут быть вызваны (инициализированы). Вызванный тип данных – это тип данных, который может быть определен как столбец таблицы; в него могут быть добавлены значения этого типа.

Хотя вы можете определить столбец в виде типа ST_Geometry, вы не добавляете значения ST_Geometry в этот столбец, поскольку он не может быть вызван. Вместо этого вы добавляете значения подкласса.

Следующая схема демонстрирует иерархию типа данных ST_Geometry и его подклассов.

ST_Geometry
Суперкласс ST_Geometry и его подклассы

Подклассы

Подклассы ST_Geometry разделены на две категории: подклассы основной геометрии и подклассы однородных наборов. Основная геометрия включает: ST_Point, ST_LineString и ST_Polygon, а однородные наборы включают ST_MultiPoint, ST_MultiLineString и ST_MultiPolygon. Как ясно из названий, наборы однородных элементов являются наборами базовых геометрий. Помимо добавлений одинаковых свойств с базовой геометрией, однородные наборы имеют некоторые собственные свойства.

Каждый подкласс хранит тип геометрии, отображенный в его имени; например, ST_MultiPoint хранит мультиточки. Список подклассов и их описание приведены в следующей таблице:

Подтип

Описание

ST_Point

  • Геометрия с размерностью 0, которая занимает отдельное местоположение в координатном пространстве
  • Имеет одиночное значение координат x,y; всегда является простым и не имеет (NULL) границы

ST_LineString

  • Одномерный объект, хранящийся как последовательность точек, которая определяет линейно-интерполированный путь
  • Объекты ST_LineString имеют длину.
  • ST_LineString является простым, если он не имеет самопересечений.
  • Конечные точки (граница) замкнутого ST_LineString занимают одну и ту же точку в пространстве.
  • ST_LineString является кольцом, если он одновременно замкнутый и простой.
  • Конечные точки обычно формируют границу ST_LineString, кроме того случая, когда ST_LineString замкнут, в этом случае граница отсутствует (NULL).
  • Внутренняя часть ST_LineString – это связанный путь, который лежит между конечными точками, кроме того случая, когда ST_LineString замкнут; в этом случае внутренняя часть является непрерывной.

ST_Polygon

  • Двумерная поверхность, хранящаяся как последовательность точек, определяющих ее внешнее ограничивающее кольцо, а также отсутствие или несколько внутренних колец
  • ST_Polygon имеет площадь и всегда является простым.
  • Внешние и любые внутренние кольца определяют границу ST_Polygon, а пространство, заключенное между кольцами, определяет внутреннюю часть ST_Polygon.
  • Кольца объекта ST_Polygon могут пересекаться в касательной точке, но не могут пересекаться (перекрещиваться).

ST_MultiPoint

  • Набор элементов ST_Point
  • Имеет размерность 0
  • ST_MultiPoint является простым, если ни один из его элементов не занимает одно и то же координатное пространство.
  • Граница у ST_MultiPoint отсутствует (NULL).

ST_MultiLineString

  • Набор элементов ST_LineString
  • Объекты ST_MultiLineString имеют длину.
  • Объекты ST_MultiLineString являются простыми, если они пересекаются только в конечных точках элементов ST_LineString.
  • Объекты ST_MultiLineString не являются простыми, если внутренние части элементов ST_LineString пересекаются.
  • Границей ST_MultiLineString являются непересекающиеся конечные точки элементов ST_LineString.
  • Объект ST_MultiLineString является замкнутым, если все его элементы ST_LineString замкнуты.
  • Граница ST_MultiLineString отсутствует (NULL), если все конечные точки всех элементов пересекаются.

ST_MultiPolygon

  • Набор полигонов
  • Объекты ST_MultiPolygon имеют площадь.
  • Границей ST_MultiPolygon является суммированная длина всех внутренних и внешних колец его элементов.
  • Внутренняя часть ST_MultiPolygon определяется, как суммарные внутренние части всех его элементов ST_Polygon.
  • Граница элементов объекта ST_MultiPolygon может пересекаться только в касательной точке.

Подтипы ST_Geometry

Учтите, что каждый подкласс наследует свойства суперкласса ST_Geometry, но также имеет собственные свойства. Функции, которые работают с типом данных ST_Geometry, принимают любой из типов элементов подклассов. Однако некоторые функции определены на уровне подклассов, и принимают только заданные подклассы. Например, функция ST_GeometryN принимает в качестве входных параметров только значения подтипов ST_MultiLinestring, ST_MultiPoint или ST_MultiPolygon.

Чтобы определить подкласс для ST_Geometry, вы можете использовать функцию ST_GeometryType. Функция ST_GeometryType получает ST_Geometry и возвращает установленный подкласс в форме текстовой строки. Чтобы определить, какое количество элементов основной геометрии содержится в однородном наборе, вы можете использовать функцию ST_NumGeometries, которая получает однородный набор и возвращает количество элементов основной геометрии, которые в нем содержатся.

Связанные темы

5/10/2014