Categorias:

Funções geoespaciais

ST_SIMPLIFY

Dado um objeto de entrada GEOGRAPHY que representa uma linha ou polígono, retorna uma aproximação mais simples do objeto. A função identifica e remove os vértices selecionados, resultando em um objeto semelhante com menos vértices.

Por exemplo, se o objeto de entrada for um polígono com 50 vértices, ST_SIMPLIFY poderá retornar um polígono mais simples com apenas 20 desses vértices.

Ao simplificar um objeto, a função remove um vértice somente se a distância entre esse vértice e a borda resultante da remoção desse vértice estiver dentro da tolerância especificada.

Sintaxe

ST_SIMPLIFY( <geography_expression>, <tolerance> [ , <preserve_collapsed> ] )

Argumentos

Obrigatório:

geography_expression

O objeto GEOGRAPHY a ser simplificado.

Dependendo do tipo do objeto GEOGRAPHY, ST_SIMPLIFY tem o seguinte efeito:

Tipo de objeto

Efeito de ST_SIMPLIFY

LineString MultiLineString, polígono ou MultiPolygon

ST_SIMPLIFY aplica o algoritmo de simplificação

Ponto ou MultiPoint

ST_SIMPLIFY não tem nenhum efeito.

GeometryCollection ou FeatureCollection

ST_SIMPLIFY aplica o algoritmo de simplificação a cada objeto da coleção.

tolerance

A distância máxima em metros entre um vértice e a borda resultante da remoção do vértice. Se a distância exceder esta tolerância para um vértice, ST_SIMPLIFY manterá esse vértice no objeto simplificado.

Opcional:

preserve_collapsed

Se TRUE, são retidos objetos que de outra forma seriam muito pequenos dada a tolerância.

Por exemplo, quando preserve_collapsed é FALSE e tolerance é 10 (metros), uma linha de 1m é reduzida a um ponto no objeto simplificado. Quando preserve_collapsed é TRUE, a linha é preservada no objeto simplificado.

Padrão: FALSE.

Retornos

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

Exemplos

Os exemplos nesta seção mostram a saída em formato WKT:

alter session set GEOGRAPHY_OUTPUT_FORMAT='WKT';

O exemplo a seguir retorna um LineString simplificado que tem menos vértices do que o LineString original. No objeto simplificado, um vértice é omitido se a distância entre o vértice e a borda que substitui o vértice for inferior a 1.000 metros.

SELECT ST_SIMPLIFY(
    TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'),
    1000);
+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(                                                                                       |
|     TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'), |
|     1000)                                                                                          |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(-122.306067 37.55412,-122.325879 37.586852)                                             |
+----------------------------------------------------------------------------------------------------+