Los tipos de datos geométricos representan objetos espaciales bidimensionales. La Table 8.20 muestra los tipos geométricos disponibles en PostgreSQL.
Table 8.20. Tipos geométricos
| Nombre | Tamaño de almacenamiento | Descripción | Representación |
|---|---|---|---|
point | 16 bytes | punto en un plano | (x,y) |
line | 24 bytes | línea infinita | {A,B,C} |
lseg | 32 bytes | segmento de línea finito | [(x1,y1),(x2,y2)] |
box | 32 bytes | caja rectangular | (x1,y1),(x2,y2) |
path | 16+16n bytes | ruta cerrada (similar al polígono) | ((x1,y1),...) |
path | 16+16n bytes | ruta abierta | [(x1,y1),...] |
polygon | 40+16n bytes | polígono (similar a la ruta cerrada) | ((x1,y1),...) |
circle | 24 bytes | círculo | <(x,y),r> (punto central y radio) |
En todos estos tipos, las coordenadas individuales se almacenan como
números de double precision (float8).
Se dispone de un rico conjunto de funciones y operadores para realizar diversas operaciones geométricas como escalado, traslación, rotación y determinación de intersecciones. Se explican en la Section 9.11.
Los puntos son el elemento básico bidimensional fundamental para los tipos
geométricos. Los valores de tipo point se especifican utilizando cualquiera de
las siguientes sintaxis:
(x,y)x,y
donde x e y son las respectivas
coordenadas, expresadas como números de punto flotante.
Los puntos se muestran utilizando la primera sintaxis.
Las líneas están representadas por la ecuación lineal
Ax + By + C = 0,
donde A y B no son ambos cero. Los valores
de tipo line se introducen y se muestran de la siguiente forma:
{ A, B, C }
Alternativamente, se puede utilizar cualquiera de las siguientes formas para la entrada:
[ (x1,y1) , (x2,y2) ] ( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
donde
(
e
x1,y1)(
son dos puntos diferentes en la línea.
x2,y2)
Los segmentos de línea se representan mediante pares de puntos que son los extremos
del segmento. Los valores de tipo lseg se especifican utilizando cualquiera
de las siguientes sintaxis:
[ (x1,y1) , (x2,y2) ] ( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
donde
(
e
x1,y1)(
son los extremos del segmento de línea.
x2,y2)
Los segmentos de línea se muestran utilizando la primera sintaxis.
Las cajas se representan mediante pares de puntos que son las esquinas opuestas
de la caja.
Los valores de tipo box se especifican utilizando cualquiera de las siguientes
sintaxis:
( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
donde
(
e
x1,y1)(
son dos esquinas opuestas cualesquiera de la caja.
x2,y2)
Las cajas se muestran utilizando la segunda sintaxis.
Se pueden proporcionar dos esquinas opuestas cualesquiera en la entrada, pero los valores se reordenarán según sea necesario para almacenar las esquinas superior derecha e inferior izquierda, en ese orden.
Las rutas se representan mediante listas de puntos conectados. Las rutas pueden ser abiertas, donde el primer y el último punto de la lista se consideran no conectados, o cerradas, donde el primer y el último punto se consideran conectados.
Los valores de tipo path se especifican utilizando cualquiera de las siguientes
sintaxis:
[ (x1,y1) , ... , (xn,yn) ] ( (x1,y1) , ... , (xn,yn) ) (x1,y1) , ... , (xn,yn) (x1,y1, ... ,xn,yn)x1,y1, ... ,xn,yn
donde los puntos son los extremos de los segmentos de línea
que componen la ruta. Los corchetes ([]) indican
una ruta abierta, mientras que los paréntesis (()) indican una
ruta cerrada. Cuando se omiten los paréntesis más externos, como
en las sintaxis tercera a quinta, se asume una ruta cerrada.
Las rutas se muestran utilizando la primera o la segunda sintaxis, según corresponda.
Los polígonos están representados por listas de puntos (los vértices del polígono). Los polígonos son muy similares a las rutas cerradas; la diferencia semántica esencial es que se considera que un polígono incluye el área dentro de él, mientras que una ruta no.
Una diferencia de implementación importante entre los polígonos y las rutas es que la representación almacenada de un polígono incluye su caja delimitadora más pequeña. Esto acelera ciertas operaciones de búsqueda, aunque calcular la caja delimitadora añade sobrecarga al construir nuevos polígonos.
Los valores de tipo polygon se especifican utilizando cualquiera de las
siguientes sintaxis:
( (x1,y1) , ... , (xn,yn) ) (x1,y1) , ... , (xn,yn) (x1,y1, ... ,xn,yn)x1,y1, ... ,xn,yn
donde los puntos son los extremos de los segmentos de línea que componen el límite del polígono.
Los polígonos se muestran utilizando la primera sintaxis.
Los círculos están representados por un punto central y un radio.
Los valores de tipo circle se especifican utilizando cualquiera de las
siguientes sintaxis:
< (x,y) ,r> ( (x,y) ,r) (x,y) ,rx,y,r
donde
(
es el punto central y x,y)r es el radio del
círculo.
Los círculos se muestran utilizando la primera sintaxis.