Come semplificare una topologia di conservazione della rete di linea?


9

Ho uno Shapefile (costituito dalle principali strade europee) con circa 250.000 segmenti che devo semplificare per il pgrouting. Ma non riesco a trovare un modo per farlo correttamente.

Ecco come appare:

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

e questo è come dovrebbe essere:

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

Devo in qualche modo rimuovere ogni Punto delle Linee che è collegato a meno di 3 Linee (non essendo un'intersezione) preservando le connessioni topologiche tra i punti rimanenti. Se qualcuno ha un'idea, sarebbe molto apprezzato!

I migliori saluti

EDIT: ho cercato di implementare l'idea di @dkastl e sono riuscito a ottenere dalla mia rete solo i nodi inutili (nodi con solo 2 stringhe di linea adiacenti) con il codice seguente (generazione della rete tratta dal blog di 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;

Quindi, tutto quello che devo fare ora è la fusione delle linee. Tuttavia, non ho idea di come. Immagino che debba essere un ciclo che per ogni riga del risultato della query precedente ottiene le linee adiacenti e le unisce. Quindi ricostruirà completamente la rete e ripeterà il processo fino a quando la query sopra non restituisce un risultato vuoto.


1
Perché devi farlo per pgRouting? Se hai già assegnato l'ID di origine / destinazione, puoi creare una nuova geometria con le stringhe di linea contenenti solo l'ID di origine e di destinazione. Dovrebbe apparire come la tua seconda immagine.
dkastl,

Il problema è che le linee sono segmentate (se guardi la prima immagine che ho pubblicato, ogni punto che vedi inizia / termina un nuovo segmento), il tuo approccio semplifica la geometria (che è buona) ma non la topologia.
Chriserik,

1
Non credo sia evidente dalla tua immagine che ogni punto inizi una nuova geometria del linestring. Hai già eseguito la funzione assegn_vertex_id di pgRouting per riempire le colonne di origine / destinazione? In tal caso, in seguito è possibile eseguire alcune query per identificare gli ID di origine / destinazione che esistono solo due volte, il che significa che a questo punto dovresti essere in grado di unire i due segmenti di linea. Nel caso in cui l'ID sorgente / destinazione esista più di due volte, deve essere un incrocio.
dkastl,

@dkastl: un'ottima idea! Ho aggiornato la mia domanda mostrando fino a che punto sono arrivato.
chriserik,

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.