Categorias:

Funções geoespaciais

ST_MAKEPOLYGONORIENTED

Cria um objeto GEOGRAPHY que representa um polígono sem furos. A função utiliza o LineString especificado como o loop externo.

Esta função não tenta corrigir a orientação do loop, permitindo assim a criação de polígonos que se estendem por mais da metade do globo. Em contraste, ST_MAKEPOLYGON inverte a orientação dessas grandes formas.

Consulte também:

TO_GEOGRAPHY, ST_MAKEPOLYGON

Sintaxe

ST_MAKEPOLYGONORIENTED( <geography_expression> )
Copy

Argumentos

geography_expression

Um objeto GEOGRAPHY que representa um LineString em que o último ponto é o mesmo que o primeiro (ou seja, um loop).

Retornos

A função retorna um valor do tipo GEOGRAPHY.

Notas de uso

  • As linhas do polígono devem formar um loop. Em outras palavras, o último ponto da sequência de pontos que definem o LineString deve ser o mesmo ponto que o primeiro da sequência.

  • Ao longo do loop, o interior do polígono deve estar à esquerda, e o exterior do polígono deve estar à direita.

Exemplos

Os exemplos a seguir demonstram como utilizar a função ST_MAKEPOLYGONORIENTED. A sequência de pontos abaixo define uma área retangular geodésica 1 grau de largura e 2 graus de altura. O canto inferior esquerdo do polígono começa no equador (latitude) e Greenwich (longitude). O último ponto na sequência é o mesmo que o primeiro, que completa o loop.

O exemplo passa o objeto GEOGRAPHY do polígono para a função ST_AREA para retornar a área do polígono.

SELECT ST_AREA(
  ST_MAKEPOLYGONORIENTED(
    TO_GEOGRAPHY('LINESTRING(0.0 0.0, 1.0 0.0, 1.0 2.0, 0.0 2.0, 0.0 0.0)')
  )
) AS area_of_polygon;

+------------------+
|  AREA_OF_POLYGON |
|------------------|
| 24724306355.5504 |
+------------------+
Copy

O exemplo seguinte tem a mesma forma, mas com orientação oposta. Como indicado pela diferença na área do polígono, o polígono representa o globo inteiro, exceto por aquela forma anterior.

SELECT ST_AREA(
  ST_MAKEPOLYGONORIENTED(
    TO_GEOGRAPHY('LINESTRING(0.0 0.0, 0.0 2.0, 1.0 2.0, 1.0 0.0, 0.0 0.0)')
  )
) AS area_of_polygon;

+-----------------+
| AREA_OF_POLYGON |
|-----------------|
| 510041348811633 |
+-----------------+
Copy