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