Categorias:

Funções geoespaciais

ST_UNION

Ao receber dois objetos de entrada GEOGRAPHY, retorna um objeto GEOGRAPHY que representa o conjunto combinado de formas para ambos os objetos (ou seja, a união de duas formas).

Consulte também:

ST_INTERSECTION, ST_DIFFERENCE, ST_SYMDIFFERENCE

Sintaxe

ST_UNION( <geography_expression_1> , <geography_expression_2> )
Copy

Argumentos

geography_expression_1

Um objeto GEOGRAPHY.

geography_expression_2

Um objeto GEOGRAPHY.

Retornos

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

Notas de uso

  • Se qualquer vértice de um objeto de entrada estiver no limite do outro objeto de entrada (excluindo os vértices), alguns pontos da união podem estar representados mais de uma vez na saída,

    Por exemplo, na instrução seguinte:

    SELECT ST_UNION(
      TO_GEOGRAPHY('POINT(1 1)'),
      TO_GEOGRAPHY('LINESTRING(1 0, 1 2)')
    );
    
    Copy

    POINT(1 1) está no limite do LINESTRING(1 0, 1 2) mas não é um vértice dele.

    Neste exemplo, não há garantia de que ST_UNION produzirá uma saída mínima. A saída esperada deve ser o linestring de entrada:

    LINESTRING(1 0, 1 2)
    
    Copy

    Mas a saída de fato pode ser:

    GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(1 0,1 1,1 2))
    
    Copy

    onde POINT (1,1) é representado duas vezes na saída: uma como o próprio ponto e outra como um ponto dentro do LineString.

Exemplos

O exemplo a seguir retorna um objeto GEOGRAPHY que representa a união de dois objetos de entrada GEOGRAPHY:

ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT';

SELECT ST_UNION(
  TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))'),
  TO_GEOGRAPHY('POLYGON((3 0, 3 4, 2 4, 1 3, 2 2, 1 1, 2 0, 3 0))')
) AS union_of_objects;
Copy

Esse exemplo produz a seguinte saída:

+-------------------------------------------------------------------------------------------------------------------------------------------+
| UNION_OF_OBJECTS                                                                                                                          |
|-------------------------------------------------------------------------------------------------------------------------------------------|
| POLYGON((3 0,3 4,2 4,1.5 3.500399839,1 4,0 4,0 0,1 0,1.5 0.5000571198,2 0,3 0),(1.5 1.500171359,1 2,1.5 2.500285599,2 2,1.5 1.500171359)) |
+-------------------------------------------------------------------------------------------------------------------------------------------+
Copy

As imagens a seguir ilustram as diferenças nas áreas que representam os objetos de entrada e saída:

Entrada

Saída

Areas of input objects passed to ST_UNION Areas of output objects returned by ST_UNION