Como simplificar uma topologia de preservação de rede de linha?

9

Eu tenho um Shapefile (que consiste nas principais estradas europeias) com cerca de 250.000 segmentos que eu tenho que simplificar para o rejunte. Mas não consigo encontrar uma maneira de fazer isso corretamente.

Isto é o que parece:

http://i.stack.imgur.com/qJ2OJ.png

e é assim que deve ser:

http://i.stack.imgur.com/FN4Z6.png

De alguma forma, tenho que remover todos os pontos das linhas que estão conectados a menos de 3 linhas (não sendo um cruzamento), preservando as conexões topológicas entre os pontos restantes. Se alguém tiver uma idéia, seria muito apreciada!

Cumprimentos

EDIT: Tentei implementar a idéia do @dkastl e consegui obter apenas os nós desnecessários (nós com apenas 2 cadeias de linhas adjacentes) da minha rede com o código abaixo (geração de rede obtida no blog da underdark http://underdark.wordpress.com / 2011/02/07 / a-beginners-guide-to-pgrouting / ):

SELECT * FROM
   (SELECT tmp.id as gid, node.the_geom FROM 
     (SELECT id, count(*) FROM network 
     JOIN node 
     ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
     GROUP BY id ORDER BY id) as tmp
   JOIN node ON (tmp.id = node.id)
   WHERE tmp.count = 2) as unn_node;

Então, tudo o que tenho a fazer agora é a fusão das linhas. No entanto, não tenho idéia de como. Eu imagino que tem que ser um loop que para cada linha do resultado da consulta acima obtenha as linhas adjacentes e as mescla. Em seguida, reconstruiria a rede completamente e repetiria o processo até que a consulta acima retornasse um resultado vazio.

chriserik
fonte
11
Por que você precisa fazer isso para o pgRouting? Se você já tiver um ID de origem / destino atribuído, poderá criar uma nova geometria com cadeias de linhas contendo apenas o ID de origem e destino. Essa deve ser a sua segunda imagem.
dkastl
O problema é que as linhas são segmentadas (se você olhar para a primeira imagem que eu postei, cada ponto que você vê inicia / termina um novo segmento), sua abordagem simplifica a geometria (o que é bom), mas não a topologia.
Chriserik
11
Não acho óbvio pela sua imagem que cada ponto inicia uma nova geometria de cadeia de linhas. Você já executou a função assign_vertex_id do pgRouting para preencher as colunas de origem / destino? Nesse caso, você poderá fazer algumas consultas posteriormente para identificar os IDs de origem / destino que existem apenas duas vezes, o que significa que você poderá mesclar os dois segmentos de linha neste momento. Caso o ID de origem / destino exista mais que duas vezes, deve ser uma interseção.
dkastl
@dkastl: Uma ideia muito boa! Atualizei minha pergunta mostrando até que ponto cheguei com ela.
chriserik

Respostas: