Categorias:

Funções geoespaciais

ST_SYMDIFFERENCE

Ao receber dois objetos de entrada GEOGRAPHY, retorna um objeto GEOGRAPHY que representa o conjunto de pontos de ambos os objetos de entrada que não fazem parte da intersecção dos objetos (ou seja, a diferença simétrica dos dois objetos).

Consulte também:

ST_INTERSECTION, ST_UNION, ST_DIFFERENCE

Sintaxe

ST_SYMDIFFERENCE( <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.

Se geography_expression_1 e geography_expression_2 forem iguais (ou seja, se a diferença simétrica for um conjunto vazio de pontos), a função retornará NULL.

Notas de uso

  • Se qualquer vértice de um objeto de entrada estiver no limite do outro objeto de entrada (excluindo os vértices), a saída pode não ser precisa.

  • Não há garantia de que a função produzirá resultados normalizados e/ou mínimos. Por exemplo, uma saída poderia consistir de um LineString contendo vários pontos que na verdade formam apenas um segmento reto.

Exemplos

O exemplo a seguir retorna um objeto GEOGRAPHY que representa a diferença simétrica entre dois objetos de entrada GEOGRAPHY:

ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT';

SELECT ST_SYMDIFFERENCE(
  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 symmetric_difference_between_objects;
Copy

Esse exemplo produz a seguinte saída:

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SYMMETRIC_DIFFERENCE_BETWEEN_OBJECTS                                                                                                                                                                                    |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MULTIPOLYGON(((1 1,1.5 1.500171359,1 2,1.5 2.500285599,1 3,1.5 3.500399839,1 4,0 4,0 0,1 0,1.5 0.5000571198,1 1)),((3 0,3 4,2 4,1.5 3.500399839,2 3,1.5 2.500285599,2 2,1.5 1.500171359,2 1,1.5 0.5000571198,2 0,3 0))) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
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_SYMDIFFERENCE Areas of output objects returned by ST_SYMDIFFERENCE