Функции пространственного доступа для ST_Geometry
Функции пространственного доступа возвращают свойство геометрии. Приведенные функции доступа определяют следующие свойства объекта ST_Geometry:
Размерность (Dimensionality)
Размерность геометрии представляет собой минимальные координаты (нет, x, y), необходимые для определения пространственного экстента геометрии.
Геометрия может иметь размерность, равную 0, 1 или 2.
Значения размерности соответствует следующему:
- 0 – нет ни длины, ни площади
- 1 – Имеется длина (x или y)
- 2 – Имеется площадь (x и y)
Подтипы точки и мультиточки имеют размерность 0. Точки представляют объекты нулевой размерности, которые могут быть смоделированы всего одной координатой, в то время как мультиточки представляют данные, которые могут быть смоделированы кластером, состоящим из несвязанных координат.
Подтипы линий и мультилиний имеют размерность 1. Они хранят объекты, такие как сегменты дорог, разветвленные системы рек, а также любые другие объекты, являющиеся линейными по природе.
Подтипы полигона и мультиполигона имеют размерность 2. Лесные массивы, участки, водная поверхность и другие объекты, которые имеют периметры, замыкающиеся в определяемой области, могут быть представлены полигональным или мультиполигональным типом данных.
Размерность важна не только, как свойство подтипа, но также для определения пространственных отношений между двумя объектами. Размерность результирующего объекта или объектов определяет, была ли операция успешной, или нет. Размерности объектов изучаются, чтобы определить, как их нужно будет сравнить.
Чтобы оценить размерность геометрии, используйте функцию ST_Dimension, которая получает объект ST_Geometry и возвращает значение его размерности как целое число. В разделе ST_Dimension можно увидеть синтаксис и пример использования этой функции.
Координаты геометрии также имеют размерность. Если геометрия имеет только координаты x и y, размерность координат равна 2. Если геометрия имеет координаты x, y и z, размерность координат равна 3. Если геометрия имеет координаты x, y, z и m, размерность координат равна 4.
Для определения размерности для геометрии, вы можете использовать функцию ST_CoordDim.
Z-координаты
С некоторыми геометриями связано третье измерение – высота или глубина. Каждая из точек, образующих геометрию объекта, может включать дополнительную координату z, обозначающую высоту или глубину объекта по отношению к поверхности земли.
Функция предиката ST_Is3D получает объект ST_Geometry в качестве входного параметра и возвращает 1 (TRUE), если данная геометрия имеет z-координаты, или 0 (FALSE), если не имеет.
Вы можете определить z-координату точки, используя функцию ST_Z.
Функция ST_MaxZ возвращает максимальное значение z-координаты, а функция ST_MinZ возвращает минимальное значение z-координаты для геометрии.
Измерения (measure)
Измерения – это значения, присвоенные каждой координате. Они используются для систем линейных координат и динамической сегментации. Например, местоположения километровых столбов вдоль шоссе могут содержать измерения, указывающие их положение. Это значение может показывать что угодно, что можно показать с помощью числа двойной точности.
Функция предиката ST_IsMeasured получает геометрию в качестве входного параметра и возвращает 1 (TRUE), если данная геометрия содержит измерения, или 0 (FALSE), если не содержит. (Используется только в реализации ST_Geometry в Oracle.)
Вы можете определить значение измерения точки, используя функцию ST_M.
Тип геометрии
Тип геометрии связан с типом геометрического объекта. Это следующие требования:
- Точки и мультиточки
- Линии и мультилинии
- Полигоны и мультиполигоны
ST_Geometry - это суперкласс, который может хранить различные подтипы. Чтобы определить, какой подтип имеет геометрия, используйте функцию ST_GeometryType или ST_Entity (только Oracle).
Набор точек (вершин) и число точек
Геометрия может иметь несколько точек (или вообще их не иметь). Геометрия считается пустой, если в ней нет точек. Точечный подтип (point subtype) - это единственная геометрия, для которой установлено ограничение в одну или ноль точек; остальные подтипы могут иметь ноль или более точек.
ST_Point
ST_Point - это геометрия нулевой размерности, которая занимает отдельное местоположение в координатном пространстве. ST_Point имеет одиночное значение координат x,y, всегда является простым и не имеет (NULL) границу. ST_Point может быть использован для определения объектов, таких как нефтяные скважины, достопримечательности и места сбора проб воды.
Функции, которые работают только с типом данных ST_Point, включают следующие:
- ST_X - Возвращает значение х-координаты точечного типа данных как число двойной точности.
- ST_Y - Возвращает значение y-координаты точечного типа данных как число двойной точности.
- ST_Z - Возвращает значение z-координаты точечного типа данных как число двойной точности.
- ST_M - Возвращает значение m-координаты точечного типа данных как число двойной точности.
ST_MultiPoint
ST_MultiPoint является набором ST_Points и, подобно своим элементам, имеет размерность 0. ST_MultiPoint является простым, если ни один из его элементов не занимает одно и то же координатное пространство. Граница у ST_MultiPoint отсутствует (NULL). ST_MultiPoints может определять такие закономерности, как воздушные схемы трансляции и случаи распространения заболеваний.
Длина и площадь
Длина и площадь - это измеряемые характеристики геометрии. Линии и элементы мультилиний являются одномерными и имеют характеристику длины. Полигоны и элементы мультиполигонов являются двухмерными поверхностями и, соответственно, имеют площадь, которую можно измерить. Для определения этих свойств вы можете использовать функции ST_Length и ST_Area. Единицы измерения могут меняться, в зависимости от того, как хранятся данные.
ST_LineString
ST_LineString - это объект с размерностью 1, хранящийся, как последовательность точек, определяющая линейно-интерполированный путь. ST_LineString является простым, если он не имеет самопересечений. Конечные точки (граница) замкнутого ST_LineString занимают одну и ту же точку в пространстве. ST_LineString является кольцом, если он одновременно замкнутый и простой. В качестве свойства, наследованного от их суперкласса ST_Geometry, объекты ST_LineString имеют длину. ST_LineString часто используется для определения линейных объектов, таких как дороги, реки и линии электропередач.
Конечные точки обычно формируют границу ST_LineString, кроме того случая, когда ST_LineString замкнут, в этом случае граница отсутствует (NULL). Внутренняя часть ST_LineString - это связанный путь, который лежит между конечными точками, кроме того случая, когда ST_LineString замкнут; в этом случае внутренняя часть является непрерывной.
Функции, которые работают с объектами ST_LineString, перечислены ниже:
- ST_StartPoint - Возвращает первую точку выбранного ST_LineString
- ST_EndPoint - Возвращает последнюю точку ST_LineString
- ST_PointN - получает ST_LineString и индекс n-ой точки и возвращает эту точку
- ST_Length - Возвращает длину ST_LineString как число двойной точности
- ST_NumPoints - Оценивает ST_LineString и возвращает число точек в его последовательности как целое число
- ST_IsRing - Функция предиката, которая возвращает 1 (TRUE), если выбранный ST_LineString является кольцом, и 0 (FALSE) в противном случае
- ST_IsClosed - Функция предиката, которая возвращает 1 (TRUE), если выбранный ST_LineString является замкнутым, и 0 (FALSE) в противном случае
Рисунок ниже демонстрирует примеры объектов ST_LineString: (1) является простым, незамкнутым ST_LineString; (2) является непростым, незамкнутым ST_LineString; (3) является замкнутым, простым ST_LineString и, соответственно, кольцом; и (4) является замкнутым, непростым ST_LineString - это не кольцо.
ST_MultiLineString
ST_MultiLineString - это набор из объектов ST_LineString. Объекты ST_MultiLineString являются простыми, если они пересекаются только в конечных точках элементов ST_LineString. Объекты ST_MultiLineString не являются простыми, если внутренние части элементов ST_LineString пересекаются.
Границей ST_MultiLineString является непересекающиеся конечные точки элементов ST_LineString. Граница ST_MultiLineString отсутствует (NULL), если все конечные точки всех элементов пересекаются. В дополнение к другим свойствам, наследованным от суперкласса ST_Geometry, объекты ST_MultiLineString имеют длину. ST_MultiLineString часто используется для разрозненных (несмежных) линейных объектов, таких как водотоки или дорожные сети.
Следующий рисунок показывает примеры объектов ST_MultiLineString: (1) является простым ST_MultiLineString, для которого граница - это четыре конечные точки двух его элементов ST_LineString. (2) является простым ST_MultiLineString, поскольку пересекаются только конечные точки его элементов ST_LineString. Границей являются две непересекающиеся конечные точки. (3) является непростым ST_MultiLineString, поскольку внутренняя часть одного из его элементов ST_LineString пересекается. Границей этого ST_MultiLineString являются три непересекающиеся конечные точки. (4) является простым незамкнутым ST_MultiLineString. Он не является замкнутым, поскольку его элементы ST_LineString не являются замкнутыми. Он является простым, поскольку все внутренние части его элементов ST_LineString не пересекаются. (5) является отдельным, простым, замкнутым ST_MultiLineString. Он является замкнутым, поскольку все его элементы замкнуты. Он является простым, поскольку все внутренние части его элементов не пересекаются.
Функции, которые работают с объектами ST_MultiLineString, включают ST_Length и ST_IsClosed.
Функция ST_Length оценивает объект ST_MultiLineString и возвращает суммарную длину всех его элементов ST_LineString, как число двойной точности.
Функция предиката ST_IsClosed возвращает 1 (TRUE), если выбранный ST_MultiLineString является замкнутым, и 0 (FALSE), если он не является замкнутым.
ST_Polygon
ST_Polygon - это двумерная поверхность, хранящаяся как последовательность точек, определяющих ее внешнее ограничивающее кольцо и ноль или более внутренних колец. Объекты ST_Polygon всегда являются простыми. Элементы ST_Polygon определяют объекты, которые имеют пространственный экстент, такие как участки земли, водные поверхности и области юрисдикции.
Данный рисунок показывает примеры объектов ST_Polygon: (1) это ST_Polygon, для которого граница определена внешним кольцом. (2) это ST_Polygon, для которого граница определена внешним кольцом и двумя внутренними кольцами. Область внутри внутренних колец является частью внешней части ST_Polygon. (3) это корректный ST_Polygon, поскольку кольца пересекаются в одной касательной точке.
Внешнее и любые внутренние кольца определяют границу ST_Polygon, и пространство, заключенное между кольцами, определяет внутреннюю часть ST_Polygon. Кольца объекта ST_Polygon могут пересекаться в касательной точке, но не могут пересекаться (перекрещиваться). В дополнение к другим свойствам, наследованным от суперкласса ST_Geometry, объекты ST_Polygon имеют площадь.
Функции, которые работают с объектами ST_Polygon, перечислены ниже:
- ST_Area - Возвращает площадь ST_Polygon как число двойной точности
- ST_Centroid - Возвращает объект ST_Point, который представляет центр конверта объекта ST_Polygon
- ST_ExteriorRing - Возвращает внешнее кольцо объекта ST_Polygon, как ST_LineString
- ST_InteriorRingN - Оценивает объект ST_Polygon и индекс, и возвращает n-ное внешнее кольцо как ST_LineString
- ST_NumInteriorRing - Возвращает количество внешних колец, которые содержит объект ST_Polygon
- ST_PointOnSurface - Возвращает объект ST_Point, который точно находится на поверхности заданного объекта ST_Polygon
ST_MultiPolygon
Границей ST_MultiPolygon является суммированная длина всех внутренних и внешних колец его элементов. Внутренняя часть ST_MultiPolygon определяется, как суммарные внутренние части всех его элементов ST_Polygon. Граница элементов объекта ST_MultiPolygon может пересекаться только в касательной точке. В дополнение к другим свойствам, наследованным от суперкласса ST_Geometry, объекты ST_MultiPolygon имеют площадь. Элементы ST_MultiPolygon определяют объекты, такие как лесной массив или несмежный участок земли, например, цепь тихоокеанских островов.
Рисунок ниже показывает примеры объектов ST_MultiPolygon: (1) это ST_MultiPolygon с двумя элементами ST_Polygon. Граница определена двумя внешними кольцами и тремя внутренними кольцами. (2) это объект ST_MultiPolygon с двумя элементами ST_Polygon. Граница определена двумя внешними кольцами и двумя внутренними кольцами. Два элемента ST_Polygon пересекаются в касательной точке.
Функции, которые работают с объектами ST_MultiPolygons, включают ST_Area, ST_Centroid, и ST_PointOnSurface.
Функция ST_Area возвращает число двойной точности, представляющее суммарное значение ST_Area для элементов ST_Polygon объекта ST_MultiPolygon.
Функция ST_Centroid возвращает объект ST_Point, который является центром конверта объекта ST_MultiPolygon.
Функция ST_PointOnSurface оценивает объект ST_MultiPolygon и возвращает объект ST_Point, который гарантированно находится на поверхности одного из его элементов ST_Polygon.
Количество простых геометрических форм в составной геометрии
Составные геометрии состоят из отдельных геометрий.
Вам может понадобиться определить, сколько отдельных геометрий содержится в составной геометрии, такой как ST_MultiPoint, ST_MultiLineString и ST_MultiPolygon. Чтобы сделать это, используйте функцию предиката ST_NumGeometries. Эта функция возвращает количество индивидуальных элементов в наборе геометрий.
Используя функцию ST_GeometryN, вы можете определить, какая геометрия из составной геометрии существует на N-ой позиции; N - это номер, который вы задаете функции. Например, если вы хотите получить третью точку из геометрии мультиточки, вам нужно указать 3 при запуске функции.
Внутренняя часть, граница, внешняя часть
Все геометрии занимают положение в пространстве, определенное их содержанием, границами и внешним окружением. Внешнее окружение геометрии – это все пространство, не занятое геометрией. Содержание геометрии – это все пространство, занятое этой геометрией. Граница геометрии – это раздел между ее содержанием и внешним окружением. Подтип наследует внутренние и внешние свойства напрямую, однако свойства границ различаются для каждого случая.
Для определения границы исходного объекта ST_Geometry используйте функцию ST_Boundary. В разделе ST_Boundary можно увидеть синтаксис и пример.
Простой или непростой
Некоторые подтипы ST_Geometry всегда являются простыми, например ST_Points или ST_Polygons. Однако, подтипы ST_LineString, ST_MultiPoint и ST_MultiLineString могут быть как простыми, так и непростыми. Они являются простыми, если они подчиняются всем топологическим правилам, которые на них накладываются, и являются непростыми в противном случае.
Далее приведены некоторые топологические правила:
- ST_LineString является простым, если он не имеет самопересечений, и является непростым, если имеет самопересечения.
- ST_MultiPoint является простым, если никакие два из его элементов не занимают одно и то же координатное пространство (имеют одинаковые координаты x,y), и непростым в противном случае.
- Объект ST_MultiLineString является простым, если ни одна из внутренних частей всех его элементов не пересекается собственной внутренней частью, и является непростым, если любые внутренние части его элементов пересекаются.
Функция предиката ST_IsSimple используется для определения, является ли объект ST_LineString, ST_MultiPoint или ST_MultiLineString простым или нет. ST_IsSimple получает объект ST_Geometry и возвращает 1 (TRUE), если ST_Geometry является простой, и 0 (FALSE) в противном случае. В разделе ST_IsSimple можно увидеть синтаксис и пример использования этой функции.
Пустой (empty) или не пустой
При отсутствии точек геометрия является пустой. Пустая геометрия имеет нулевые значения конверта, границы, содержания и внешнего окружения. Пустая геометрия всегда является простой. Пустые строки линий и строки мультилиний имеют длину 0. Пустые полигоны и мультиполигоны имеют площадь 0.
Функция предиката ST_IsEmpty может быть использована для определения того, является ли геометрия пустой. Она анализирует объект ST_Geometry и возвращает 1 (TRUE), если ST_Geometry является пустой геометрией, и 0 (FALSE) в противном случае. В разделе ST_IsEmpty можно увидеть синтаксис и пример использования этой функции.
IsClosed (замкнуты) и IsRing (кольцо)
Линейные геометрии могут быть замкнутыми и/или быть кольцами. Линии могут быть замкнутыми и не быть кольцами. Вы можете определить, является ли линия действительно замкнутой, используя функцию предиката ST_IsClosed; она возвращает TRUE, если начальная точка и конечная точка линии пересекаются. Кольца - это линии, которые являются замкнутыми и простыми. ST_IsRing - это функция предиката, которая может быть использована для проверки, является ли линия действительно кольцом; возвращает TRUE, если линия замкнутая и простая.
В разделах ST_IsClosed и ST_IsRing можно увидеть синтаксис и примеры использования.
Конверт (Envelope)
Каждая геометрия имеет конверт. Конверт геометрии представляет собой граничную геометрию, образуемую минимальными и максимальными координатами x,y. Для точечных геометрий, где минимальные и максимальные координаты x,y совпадают, вокруг этих координат создается прямоугольник или конверт. В линейной геометрии конечные точки линии представляют собой две стороны конверта, а другие две стороны создаются непосредственно над линией и под линией.
Функция ST_Envelope получает ST_Geometry и возвращает объект ST_Geometry, представляющий конверт исходного ST_Geometry. В разделе ST_Envelope можно увидеть синтаксис и пример использования.
Чтобы найти отдельные минимальные и максимальные значение координаты x и y для геометрии, используйте функции ST_MinX, ST_MinY, ST_MaxX и ST_MaxY.
Система пространственной привязки
Система пространственной привязки определяет матрицу трансформации координат для каждого типа геометрии. Состоит из системы координат, разрешения и допуска.
Все системы пространственной привязки, известные базе геоданных, хранятся в таблице spatial_references.
Существует две функции, используемые для получения информации о системе пространственной привязки для геометрий: ST_SRID и ST_EqualSRS.
Функция ST_SRID получает ST_Geometry и возвращает его идентификатор пространственной привязки как целое число.
Функция ST_EqualSRS определяет, являются ли идентичными системы пространственной привязки для двух различных классов объектов или нет.
В разделах ST_SRID и ST_EqualSRS можно увидеть синтаксис и примеры использования этих функций.
Вы можете найти дополнительную информацию о пространственных привязках в разделе Свойства пространственной привязки. При использовании СУБД IBM: см. руководства пользователя IBM DB2 Spatial Extender and geodetic Extender User's Guide and Reference или IBM Informix Spatial DataBlade Module User's Guide для получения дополнительной информации.
Размер объектов (только PostgreSQL)
Объекты (пространственные записи в таблице) требуют определенного размера пространства для хранения в байтах. Для определения того, насколько большим является каждый объект в таблице, вы можете использовать функцию ST_GeoSize.