Simplificando geometrias (generalização)

22

Quais são as formas recomendadas de simplificar geometrias? Tendo em mente as projeções e simplificando as geometrias de estado, por exemplo.

Ouvi falar sobre a conversão para uma projeção "equi-distante" que permite simplificação sem distorção e, em seguida, a conversão novamente para a projeção escolhida.

John Weldon
fonte
4
Não tenho certeza, mas "generalização" pode ser uma tag mais descritiva para isso. Simplificar, pelo menos no contexto do ArcGIS, é um método para garantir a correção topológica. A Wikipedia diz que a simplificação faz parte da Generalização Cartográfica. en.wikipedia.org/wiki/Cartographic_generalization
Kirk Kuykendall
Ótima sugestão @Kirk
John Weldon

Respostas:

11

Como Glennon mencionou, o algoritmo padrão para fazer isso é Douglas-Peucker , que é o algoritmo padrão usado em software como PostGIS (GEOS) via St_Simplify, ArcGIS via Generalizee GRASS via v.generalize. O artigo da Wikipedia também possui links para uma implementação em Python .

O GRASS suporta vários algoritmos diferentes, conforme explicado na página de ajuda do v.generalize .

Na questão da projeção, acho que, neste caso, é um arenque vermelho que pode ser ignorado. O único problema que vem à mente são as linhas potencialmente densificadoras para evitar que elas sejam simplificadas demais.

scw
fonte
5

Você pode investigar o algoritmo Douglas – Peucker - um método para reduzir o número de pontos em uma curva aproximada por uma série de pontos. Veja: http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

A substituição da geometria original ou a criação de uma loja secundária variarão de acordo com o uso.

Glennon
fonte
3

Se por "simplificação", você quer dizer uma redução simples do número de pontos, use um algoritmo básico de filtragem, como o filtro Douglass peucker. Um link útil para isso: http://mapshaper.org/

Se por "simplificação", você quer dizer obter uma forma mais simples, nem sempre os algoritmos de filtragem são adequados. Algoritmos de generalização mais avançados devem ser usados. Alguns documentos sobre esses algoritmos podem ser encontrados lá: http://generalisation.icaci.org/ , com alguns exemplos de resultados: http://generalisation.icaci.org/index.php/results . Apenas alguns desses algoritmos são implementados nos softwares comerciais comuns de GIS. Alguns podem ser acessados ​​usando este: http://webgen.geo.uzh.ch/

julien
fonte
os sites aci.ign.fr não estão acessíveis. Você sabe onde podemos encontrar exemplos do "algoritmo de generalização avançado" que você está mencionando?
Radouxju 22/12
O URL mudou, verifique: generalisation.icaci.org
julien
2

Se você estiver simplificando a geometria devido a limitações no poder de processamento do computador, considere gerar mipmaps com máscaras alfa associadas para cada geometria em vários níveis.

Jon Bringhurst
fonte
Muito interessante, você estaria disposto a elaborar?
John Weldon
Bem, para fazer isso, você precisará rasterizar cada geometria vetorial em um bitmap para cada nível em que você permite que os usuários aumentem e diminuam o zoom no mapa. Em seguida, em vez de desenhar a geometria vetorial para cada nível repetidamente, basta renderizar o bitmap. Portanto, o cálculo para rasterizar a geometria (que é caro se você tiver uma tonelada de vértices) é feito antecipadamente, em vez de cada vez que o usuário executa uma ação. A máscara alfa entra em cena quando você desenha o bitmap - ela é usada para desenhar apenas a própria forma.
precisa
1

Este é um tópico difícil, pois você deve levar em consideração algum tipo de resolução do seu conjunto de dados. Quando um vértice da geometria é igual a outro vértice? Eu nunca ouvi falar de conversão e reconversão, embora fosse um teste interessante.

Geometrias simples, de acordo com o OGC, geometrias que não se interceptam e, no caso de polígonos, geometrias corretamente orientadas, para o (s) invólucro (s) externo (s) e o (s) invólucro (s) interno (s) e posteriormente.

George Silva
fonte