8.8. Геометрические типы #
Геометрические типы данных представляют объекты в двумерном пространстве. Все существующие в Postgres Pro геометрические типы перечислены в Таблице 8.20.
Таблица 8.20. Геометрические типы
| Имя | Размер | Описание | Представление |
|---|---|---|---|
point | 16 байт | Точка на плоскости | (x,y) |
line | 24 байта | Бесконечная прямая | {A,B,C} |
lseg | 32 байта | Отрезок | [(x1,y1),(x2,y2)] |
box | 32 байта | Прямоугольник | (x1,y1),(x2,y2) |
path | 16+16n байт | Закрытый путь (подобный многоугольнику) | ((x1,y1),...) |
path | 16+16n байт | Открытый путь | [(x1,y1),...] |
polygon | 40+16n байт | Многоугольник (подобный закрытому пути) | ((x1,y1),...) |
circle | 24 байта | Окружность | <(x,y),r> (центр окружности и радиус) |
Во всех этих типах отдельные координаты хранятся как числа типа double precision (float8).
Для выполнения различных геометрических операций, в частности масштабирования, вращения и определения пересечений, PostgreSQL предлагает богатый набор функций и операторов. Они рассматриваются в Разделе 9.11.
8.8.1. Точки #
Точки — это основной элемент, на базе которого строятся все остальные геометрические типы. Значения типа point записываются в одном из двух форматов:
(x,y)x,y
где x и y — координаты точки на плоскости, выраженные числами с плавающей точкой.
Выводятся точки в первом формате.
8.8.2. Прямые #
Прямые представляются линейным уравнением Ax + By + C = 0, где A и B не могут быть равны 0 одновременно. Значения типа line вводятся и выводятся в следующем виде:
{ A, B, C }
Кроме того, для ввода может использоваться любая из этих форм:
[ (x1,y1) , (x2,y2) ] ( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
где ( и x1,y1)( — две различные точки на данной прямой.x2,y2)
8.8.3. Отрезки #
Отрезок представляется парой точек, определяющих концы отрезка. Значения типа lseg записываются в одной из следующих форм:
[ (x1,y1) , (x2,y2) ] ( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
где ( и x1,y1)( — концы отрезка.x2,y2)
Выводятся отрезки в первом формате.
8.8.4. Прямоугольники #
Прямоугольник представляется двумя точками, находящимися в противоположных его углах. Значения типа box записываются в одной из следующих форм:
( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
где ( и x1,y1)( — противоположные углы прямоугольника.x2,y2)
Выводятся прямоугольники во второй форме.
Во вводимом значении могут быть указаны любые два противоположных угла, но затем они будут упорядочены, так что внутри сохранятся правый верхний и левый нижний углы, в таком порядке.
8.8.5. Пути #
Пути представляют собой списки соединённых точек. Пути могут быть закрытыми, когда подразумевается, что первая и последняя точка в списке соединены, или открытыми, в противном случае.
Значения типа path записываются в одной из следующих форм:
[ (x1,y1) , ... , (xn,yn) ] ( (x1,y1) , ... , (xn,yn) ) (x1,y1) , ... , (xn,yn) (x1,y1, ... ,xn,yn)x1,y1, ... ,xn,yn
где точки задают узлы сегментов, составляющих путь. Квадратные скобки ([]) указывают, что путь открытый, а круглые (()) — закрытый. Когда внешние скобки опускаются, как в показанных выше последних трёх формах, считается, что путь закрытый.
Пути выводятся в первой или второй форме, в соответствии с типом.
8.8.6. Многоугольники #
Многоугольники представляются списками точек (вершин). Многоугольники похожи на закрытые пути, но важное семантическое отличие состоит в том, что многоугольник считается содержащим область внутри него, а путь — нет.
Важное различие в реализации между многоугольниками и путями заключается в том, что сохранённое представление многоугольника включает его наименьший окружающий прямоугольник. Это ускоряет определённые операции поиска, хотя вычисление окружающего прямоугольника добавляет издержки при построении новых многоугольников.
Значения типа polygon записываются в одной из следующих форм:
( (x1,y1) , ... , (xn,yn) ) (x1,y1) , ... , (xn,yn) (x1,y1, ... ,xn,yn)x1,y1, ... ,xn,yn
где точки задают узлы сегментов, образующих границу многоугольника.
Выводятся многоугольники в первом формате.
8.8.7. Окружности #
Окружности задаются координатами центра и радиусом. Значения типа circle записываются в одном из следующих форматов:
< (x,y) ,r> ( (x,y) ,r) (x,y) ,rx,y,r
где ( — центр окружности, а x,y)r — её радиус.
Выводятся окружности в первом формате.