Os tipos de dados geométricos representam objetos espaciais bidimensionais. A Tabela 8.20 mostra os tipos de dados geométricos disponíveis no PostgreSQL.
Tabela 8.20. Tipos de dados geométricos
| Nome | Tamanho de armazenamento | Descrição | Representação |
|---|---|---|---|
point | 16 bytes | Ponto em um plano | (x,y) |
line | 24 bytes | Linha infinita | {A,B,C} |
lseg | 32 bytes | Segmento de linha finito | [(x1,y1),(x2,y2)] |
box | 32 bytes | Caixa retangular | (x1,y1),(x2,y2) |
path | 16+16n bytes | Caminho fechado (semelhante ao polígono) | ((x1,y1),...) |
path | 16+16n bytes | Caminho aberto | [(x1,y1),...] |
polygon | 40+16n bytes | Polígono (semelhante ao caminho fechado) | ((x1,y1),...) |
circle | 24 bytes | Círculo | <(x,y),r> (ponto central e raio) |
Em todos estes tipos de dados, as coordenadas individuais são
armazenadas como números de precisão dupla
(double precision/float8).
Está disponível um amplo conjunto de funções e operadores para realizar várias operações geométricas, como escala, translação, rotação e determinação de interseções, conforme explicado na Seção 9.11.
Os pontos são o bloco de construção bidimensional fundamental para
os tipos de dados geométricos.
Os valores do tipo de dados point
são especificados usando uma das seguintes sintaxes:
(x,y)x,y
onde x e y
são as respectivas coordenadas, como números de ponto flutuante.
Os pontos têm como formato de saída a primeira sintaxe.
As linhas são representadas pela equação linear
Ax + By +
C = 0, onde A
e B não são ambos iguais a zero.
Os valores do tipo de dados line têm o seguinte
formato de entrada e saída:
{ A, B, C }
Como alternativa, um dos seguintes formatos pode ser usado para a entrada:
[ (x1,y1) , (x2,y2) ] ( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
onde
(
e
x1,y1)(
são dois pontos diferentes na linha.
x2,y2)
Os segmentos de linha são representados por pares de pontos que são
as extremidades do segmento. Os valores do tipo de dados
lseg são especificados usando uma das seguintes sintaxes:
[ (x1,y1) , (x2,y2) ] ( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
onde
(
e
x1,y1)(
são os pontos das extremidades do segmento de linha.
x2,y2)
Os segmentos de linha têm como formato de saída a primeira sintaxe.
As caixas são representadas por pares de pontos que são cantos
diametralmente opostos da caixa. Os valores do tipo de dados
box são especificados usando uma das seguintes sintaxes:
( (x1,y1) , (x2,y2) ) (x1,y1) , (x2,y2)x1,y1,x2,y2
onde
(
e
x1,y1)(
são quaisquer dois cantos diametralmente opostos da caixa.
x2,y2)
As caixas têm como formato de saída a segunda sintaxe.
Quaisquer dois cantos diametralmente opostos podem ser fornecidos na entrada, mas os valores são reordenados conforme necessário para armazenar os cantos superior direito e inferior esquerdo, nessa ordem.
Os caminhos são representados por listas de pontos conectados. Os caminhos podem ser abertos, onde o primeiro e o último pontos da lista são considerados não conectados, ou fechados, onde o primeiro e o último pontos são considerados conectados.
Os valores do tipo de dados path são especificados
usando uma das seguintes sintaxes:
[ (x1,y1) , ... , (xn,yn) ] ( (x1,y1) , ... , (xn,yn) ) (x1,y1) , ... , (xn,yn) (x1,y1, ... ,xn,yn)x1,y1, ... ,xn,yn
onde os pontos são os pontos finais dos segmentos de linha que
compõem o caminho. Os colchetes ([]) indicam um
caminho aberto, enquanto os parênteses (())
indicam um caminho fechado. Quando os parênteses mais externos são
omitidos, como acontece da terceira até a quinta sintaxe, é
assumido um caminho fechado.
Os caminhos têm como formato de saída a primeira ou a segunda sintaxe, conforme seja apropriado.
Os polígonos são representados por listas de pontos (os vértices do polígono). Os polígonos são muito semelhantes aos caminhos fechados; a principal diferença semântica reside no fato de que um polígono inclui a área que está contida dentro dele, enquanto um caminho não.
Uma diferença importante na implementação entre polígonos e caminhos é que a representação armazenada de um polígono inclui sua menor caixa delimitadora. Isto acelera certas operações de busca, embora o cálculo da caixa delimitadora adicione sobrecarga durante a construção de novos polígonos.
Os valores do tipo de dados polygon são especificados
usando uma das seguintes sintaxes:
( (x1,y1) , ... , (xn,yn) ) (x1,y1) , ... , (xn,yn) (x1,y1, ... ,xn,yn)x1,y1, ... ,xn,yn
onde os pontos são os pontos finais dos segmentos de reta que compõem o limite do polígono.
Os polígonos têm como formato de saída a primeira sintaxe.
Os círculos são representados por um ponto central e um raio.
Os valores do tipo de dados circle são especificados
usando uma das seguintes sintaxes:
< (x,y) ,r> ( (x,y) ,r) (x,y) ,rx,y,r
onde
(
é o ponto central e x,y)r é o raio do círculo.
Os círculos têm como formato de saída a primeira sintaxe.