Quando devo usar ST_Buffer?

8

Gostaria de saber qual é o sentido de usar a operação st_buffer. No guia de referência do PostGIS, há apenas a sintaxe e uma breve descrição desta operação.

Você poderia dar alguns exemplos para entender as vantagens desta operação?

fabrizio
fonte

Respostas:

12

Como o @Underdark comenta, ST_Dwithin é a maneira recomendada de encontrar geometrias à distância. Em muitos outros sistemas gis, o método buffer é a única maneira, mas a criação de buffers é bastante cara.

Mas há outros casos de uso em que você precisa armazenar em buffer. Um motivo pode ser visualizar um buffer. Se você, por exemplo, deseja mostrar a área a menos de 100 metros de uma rodovia, pode fazer um buffer.

Outro caso é se você deseja que a área a 100 metros da rodovia seja cortada de outro mapa. Digamos que você tenha um mapa mostrando o uso da área e deseje analisar quanto da área a menos de 100 metros da rodovia é floresta e qual é a área agrícola. Então você cria um buffer e cria uma interseção com o mapa de uso da área.

Há um exemplo na página 8-10 deste tutorial:
http://postgisonline.org/map.php?tutorial=mixed_examples.html

Nicklas Avén
fonte
1
O último link parece estar morto.
Aaron
6

O OpenGeo fornece um resumo muito bom do ST_Buffer. Observe a capacidade de transmitir um raio de buffer negativo.

A função de buffer também é uma solução útil às vezes. Ao passar um raio de buffer zero, você pode criar uma área de cobertura de uma coleção de geometrias ou "reparar" uma geometria de polígono inválida.

rec.thegeom
fonte
2

ummm para fazer um buffer? Isso é tudo o que realmente faz.

Eu realmente não chamaria isso de uma descrição curta http://www.postgis.org/documentation/manual-svn/ST_Buffer.html

Um caso de uso é se você deseja selecionar todos os objetos em uma tabela que estejam a 20m de cada objeto em outra tabela.

Nathan W
fonte
4
Eu acho que é recomendável usar ST_Distance para esse caso de uso.
underdark
1
Não, é recomendável usar ST_DWithin como Nicklas mencionou. ST_Distance é lento porque não usa um índice. ST_DWithin usa um índice e possui lógica de curto-circuito para não precisar calcular completamente a distância para descobrir se duas coisas estão dentro da distância especificada. ST_Buffer realmente só deve ser usado para visualização
LR1234567
Eu li o que eu esperava para ler, não o que foi escrito :-)
Nicklas Aven