9.11. Геометрические функции и операторы
Для геометрических типов point
, box
, lseg
, line
, path
, polygon
и circle
разработан большой набор встроенных функций и операторов, представленный в Таблице 9.36, Таблице 9.37 и Таблице 9.38.
Таблица 9.36. Геометрические операторы
Оператор Описание Пример(ы) |
---|
Добавляет координаты второго аргумента типа
|
Соединяет два открытых пути (если один из путей замкнутый, возвращает NULL).
|
Вычитает координаты второго аргумента типа
|
Умножает координаты каждой точки первого аргумента на координаты второго аргумента типа
|
Делит координаты каждой точки первого аргумента на координаты второго аргумента типа
|
Вычисляет общую длину. Имеется для типов
|
Вычисляет центральную точку. Имеется для типов
|
Возвращает количество точек. Имеется для типов
|
Вычисляет точку пересечения, а если пересечения нет, возвращает NULL. Имеется для типов
|
Вычисляет пересечение двух прямоугольников, а если пересечения нет, возвращает NULL.
|
Вычисляет ближайшую к первому объекту точку, принадлежащую второму объекту. Имеется для следующих пар типов: (
|
Вычисляет расстояние между объектами. Имеется для всех семи геометрических типов, для всех сочетаний типа
|
Первый объект содержит второй? Имеется для следующих пар типов: (
|
Первый объект содержится во втором? Имеется для следующих пар типов: (
|
Объекты пересекаются? (Для выполнения этого условия достаточно одной общей точки.) Имеется для типов
|
Первый объект строго слева от второго? Имеется для типов
|
Первый объект строго справа от второго? Имеется для типов
|
Первый объект не простирается правее второго? Имеется для типов
|
Первый объект не простирается левее второго? Имеется для типов
|
Первый объект строго ниже второго? Имеется для типов
|
Первый объект строго выше второго? Имеется для типов
|
Первый объект не простирается выше второго? Имеется для типов
|
Первый объект не простирается ниже второго? Имеется для типов
|
Первый объект ниже (или касается снизу) второго?
|
Первый объект выше (или касается сверху) второго?
|
Объекты пересекаются? Имеется для следующих пар типов: (
|
Линия является горизонтальной?
|
Точки выровнены по горизонтали (имеют одинаковую координату y)?
|
Линия является вертикальной?
|
Точки выровнены по вертикали (имеют одинаковую координату x)?
|
Линии перпендикулярны?
|
Линии параллельны?
|
Объекты совпадают? Имеется для типов
|
[a] При «повороте» прямоугольника эти операторы только перемещают его угловые точки: стороны прямоугольника считаются всегда параллельными осям. Таким образом, эта операция, в отличие от настоящего поворота, изменяет размер прямоугольника. |
Внимание
Заметьте, что оператор «идентичности», ~=
, представляет собой обычную проверку равенства значений point
, box
, polygon
и circle
. Для некоторых геометрических типов определён также оператор =
, но =
проверяет только равенство площадей. Другие скалярные операторы сравнения (<=
и т. д.) для тех типов, для которых они реализованы, тоже сравнивают площади.
Примечание
До PostgreSQL 14 применявшиеся к точкам операторы point
<<|
point
(строго ниже) и point
|>>
point
(строго выше) назывались <^
и >^
соответственно. Эти имена по-прежнему доступны, но считаются устаревшими и в конце концов будут удалены.
Таблица 9.37. Геометрические функции
Таблица 9.38. Функции преобразования геометрических типов
К двум компонентам типа point
(точка) можно обратиться, как к элементам массива с индексами 0 и 1. Например, если t.p
— столбец типа point
, SELECT p[0] FROM t
вернёт координату X, а UPDATE t SET p[1] = ...
изменит координату Y. Таким же образом, значение типа box
или lseg
можно воспринимать как массив двух значений типа point
.