Os tipos de dados geométricos point, box,
lseg, line, path,
polygon e circle possuem um grande conjunto
de funções e operadores de suporte nativos, descritos na
Tabela 9.36, na
Tabela 9.37 e na
Tabela 9.38.
Tabela 9.36. Operadores geométricos
Operador Descrição Exemplo(s) |
|---|
Adiciona as coordenadas do segundo argumento (do tipo de dados
|
Concatena dois caminhos abertos (retorna nulo se um dos caminhos for fechado).
|
Subtrai as coordenadas do segundo argumento (do tipo de dados
|
Multiplica cada ponto do primeiro argumento pelo segundo
argumento (do tipo de dados
|
Divide cada ponto do primeiro argumento pelo segundo
argumento (do tipo de dados
|
Calcula o comprimento total.
Disponível para os tipos de dados
|
Calcula o ponto central.
Disponível para os tipos de dados
|
Retorna o número de pontos.
Disponível para os tipos de dados
|
Calcula o ponto de interseção, ou nulo, caso não haja nenhum.
Disponível para os tipos de dados
|
Calcula a interseção de duas caixas, ou nulo, caso não haja nenhuma.
|
Calcula o ponto mais próximo do primeiro objeto no segundo objeto.
Disponível para estes pares de tipos de dados:
(
|
Calcula a distância entre dois objetos.
Disponível para todos os tipos de dados geométricos,
para todas as combinações do tipo de dados
|
O primeiro objeto contém o segundo objeto?
Disponível para estes pares de tipos de dados:
(
|
O primeiro objeto está contido no segundo objeto?
Disponível para estes pares de tipos de dados:
(
|
Esses objetos se sobrepõem?
(Um ponto em comum faz com que seja verdade.)
Disponível para os tipos de dados
|
O primeiro objeto está inteiramente à esquerda do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto está inteiramente à direita do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto não se estende à direita do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto não se estende à esquerda do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto está inteiramente abaixo do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto está inteiramente acima do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto não se estende acima do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto não se estende abaixo do segundo objeto?
Disponível para os tipos de dados
|
O primeiro objeto está abaixo do segundo objeto (permite que os lados se toquem)?
|
O primeiro objeto está acima do segundo objeto (permite que os lados se toquem)?
|
Esses objetos se intersectam?
Disponível para estes pares de tipos de dados:
(
|
A linha é horizontal?
|
Os pontos estão alinhados horizontalmente (ou seja, todos têm a mesma coordenada y)?
|
A linha é vertical?
|
Os pontos estão alinhados verticalmente (ou seja, todos têm a mesma coordenada x)?
|
As linhas são perpendiculares?
|
As linhas são paralelas?
|
Esses objetos são o mesmo?
Disponível para os tipos de dados
|
[a] “Rotacionar” uma caixa com estes operadores só move seus pontos do canto: a caixa ainda é considerada tendo os lados paralelos aos eixos. Portanto, o tamanho da caixa não é preservado, como aconteceria numa rotação de verdade. |
Note que o operador o “mesmo que”, ~=,
representa a noção usual de igualdade para os tipos de dados
point, box, polygon
e circle.
Alguns tipos de dados geométricos também possuem o operador
=, mas = compara
áreas iguais apenas.
Os outros operadores escalares de comparação (<=
e assim por diante), quando estão disponíveis para estes tipos de dados,
da mesma forma comparam áreas.
Antes do PostgreSQL 14,
os operadores de comparação de ponto acima/abaixo de outro ponto
(point <<| point) e
(point |>> point)
eram chamados, respectivamente, de
<^ e >^.
Esses nomes ainda estão disponíveis, mas estão em obsolescência e
deverão ser removidos.
Tabela 9.37. Funções geométricas
Tabela 9.38. Funções de conversão de tipo de dados geométrico
É possível acessar os dois números componentes de um tipo de dados
point como se o ponto fosse uma matriz com índices 0 e 1.
Por exemplo, se t.p for uma coluna do
tipo de dados point, então
SELECT p[0] FROM t irá recuperar a coordenada X,
e UPDATE t SET p[1] = ... irá atualizar a
coordenada Y.
Da mesma forma, um valor do tipo de dados box ou
lseg pode ser tratado como uma matriz de dois valores
do tipo de dados point.