8.8. Tipos de dados geométrico #

8.8.1. Pontos
8.8.2. Linhas
8.8.3. Segmentos de linha
8.8.4. Caixas
8.8.5. Caminhos
8.8.6. Polígonos
8.8.7. Círculos

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

NomeTamanho de armazenamentoDescriçãoRepresentação
point16 bytesPonto em um plano(x,y)
line24 bytesLinha infinita{A,B,C}
lseg32 bytesSegmento de linha finito[(x1,y1),(x2,y2)]
box32 bytesCaixa retangular(x1,y1),(x2,y2)
path16+16n bytesCaminho fechado (semelhante ao polígono)((x1,y1),...)
path16+16n bytesCaminho aberto[(x1,y1),...]
polygon40+16n bytesPolígono (semelhante ao caminho fechado)((x1,y1),...)
circle24 bytesCí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.

8.8.1. Pontos #

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.

8.8.2. Linhas #

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 (x1,y1) e (x2,y2) são dois pontos diferentes na linha.

8.8.3. Segmentos de linha #

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 (x1,y1) e (x2,y2) são os pontos das extremidades do segmento de linha.

Os segmentos de linha têm como formato de saída a primeira sintaxe.

8.8.4. Caixas #

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 (x1,y1) e (x2,y2) são quaisquer dois cantos diametralmente opostos da caixa.

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.

8.8.5. Caminhos #

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.

8.8.6. Polígonos #

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.

8.8.7. Círculos #

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 ) , r
    x , y   , r

onde (x,y) é o ponto central e r é o raio do círculo.

Os círculos têm como formato de saída a primeira sintaxe.