Eu tenho um gráfico de rede que preciso simplificar no sentido de reduzir o número de arestas . A idéia seria mesclar nós localizados próximos e remover as arestas curtas de conexão.
Como isso pode ser alcançado no PostGIS ou GRASS? Ou existem abordagens melhores para simplificar automaticamente uma rede como essa?
Eu já tentei a função ST_SnapToGrid, mas não estou satisfeito com os resultados (cinza = original, preto = encaixado):
Respostas:
O mais próximo que cheguei até agora é este:
Está quebrando as estradas com uma tolerância de 5 metros e removendo todas as linhas de comprimento zero. Não é uma solução ideal, pois parece se encaixar aleatoriamente em algum vértice.
fonte
Você já experimentou o GRASS v.generalize ?
v.generalize
permite escolher o algoritmo de generalização com o atributo method Há um monte: douglas, douglas_reduction, lang, redução, reumann, boyle, deslizamento de média, distance_weighting, chaiken, hermite, cobras, rede, deslocamento .E parâmetros adicionais, como
threshold
,degree_thresh
,angle_thresh
(dependendo do algoritmo escolhido) pode ajudá-lo a obter um resultado preciso.Aí vem um tutorial .
fonte
Eu não fiz isso, mas acho que posso sugerir uma direção.
ST_ModEdgeHeal mesclará uma borda na outra. ST_NewEdgeHeal substituirá ambos por uma nova aresta.
Manual de topologia do PostGIS
fonte
@underdark, vejo que você escreveu uma ferramenta para densificar linhas no Sextante. Por isso, sugiro o seguinte algoritmo para evitar o encaixe "aleatório" de um dos seus pontos.
Selecione os segmentos de linha dos quais deseja se livrar com base no comprimento.
Para cada um desses segmentos, crie um ponto no ponto do meio
Exclua o pequeno segmento
Agora você pode usar o ST_Snap no PostGIS (veja o exemplo aqui )
EDIT: observe que, no seu caso, você também pode usar o v.net primeiro para remover os pseudo-nós (nó que conecta apenas duas linhas)
fonte
Encaminhando como Michaël Michaud analisou isso na lista de desenvolvedores do OpenJUMP:
fonte