- Categorias:
ST_SIMPLIFY¶
Dado um objeto de entrada GEOGRAPHY ou GEOMETRY 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> ] )
ST_SIMPLIFY( <geometry_expression>, <tolerance> )
Argumentos¶
Obrigatório:
geography_expression
. OR .geometry_expression
O objeto GEOGRAPHY ou GEOMETRY a ser simplificado.
Dependendo do tipo do objeto GEOGRAPHY ou GEOMETRY, 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
Para objetos GEOGRAPHY, ST_SIMPLIFY aplica o algoritmo de simplificação a cada objeto da coleção. . . Para objetos GEOMETRY, ST_SIMPLIFY não oferece suporte a estes tipos.
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
(Somente para objetos GEOGRAPHY) Se
TRUE
, são retidos objetos que de outra forma seriam muito pequenos dada a tolerância.Por exemplo, quando
preserve_collapsed
éFALSE
etolerance
é10
(metros), uma linha de 1m é reduzida a um ponto no objeto simplificado. Quandopreserve_collapsed
éTRUE
, a linha é preservada no objeto simplificado.Padrão:
FALSE
.
Retornos¶
A função retorna um valor do tipo GEOGRAPHY ou GEOMETRY.
Exemplos¶
Exemplos GEOGRAPHY¶
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) | +----------------------------------------------------------------------------------------------------+
Exemplos GEOMETRY¶
Os exemplos nesta seção mostram a saída em formato WKT:
ALTER SESSION SET GEOMETRY_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 500 metros.
SELECT ST_SIMPIFY(
TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'),
500);
+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'), 500) |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(1100 1100,3100 3100,4900 1100,3100 1900) |
+----------------------------------------------------------------------------------------------------+
O exemplo a seguir simplifica uma elipse que tem 36 vértices iniciais para uma forma com 16 ou 10 vértices, dependendo do argumento tolerance
:
SELECT ST_NUMPOINTS(geom) AS numpoints_before,
ST_NUMPOINTS(ST_Simplify(geom, 0.5)) AS numpoints_simplified_05,
ST_NUMPOINTS(ST_Simplify(geom, 1)) AS numpoints_simplified_1
FROM
(SELECT ST_BUFFER(to_geometry('LINESTRING(0 0, 1 1)'), 10) As geom);
+------------------+-------------------------+------------------------+
| NUMPOINTS_BEFORE | NUMPOINTS_SIMPLIFIED_05 | NUMPOINTS_SIMPLIFIED_1 |
|------------------+-------------------------+------------------------|
| 36 | 16 | 10 |
+------------------+-------------------------+------------------------+