Comment simplifier une topologie de préservation de réseau en ligne?


9

J'ai un Shapefile (composé des principales routes européennes) avec environ 250 000 segments que je dois simplifier pour le pgrouting. Mais je n'arrive pas à trouver un moyen de le faire correctement.

Voici à quoi ça ressemble:

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

et voici à quoi cela devrait ressembler:

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

Je dois en quelque sorte supprimer tous les points des lignes qui sont connectés à moins de 3 lignes (n'étant pas une intersection) tout en préservant les connexions topologiques entre les points restants. Si quelqu'un a une idée, ce serait grandement apprécié!

Meilleures salutations

EDIT: J'ai essayé de mettre en œuvre l'idée de @dkastl et j'ai réussi à obtenir uniquement les nœuds inutiles (nœuds avec seulement 2 chaînes de lignes adjacentes) de mon réseau avec le code ci-dessous (génération de réseau tirée du blog d'Underdark http://underdark.wordpress.com / 2011/02/07 / un-guide-débutant-pour-le-groutage / ):

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;

Donc, je n'ai plus qu'à fusionner les lignes. Cependant, je ne sais pas comment. J'imagine qu'il doit s'agir d'une boucle qui, pour chaque ligne du résultat de la requête ci-dessus, obtient les lignes adjacentes et les fusionne. Ensuite, il reconstruirait complètement le réseau et répéterait le processus jusqu'à ce que la requête ci-dessus renvoie un résultat vide.


1
Pourquoi devez-vous faire cela pour pgRouting? Si vous disposez déjà d'un ID source / cible, vous pouvez créer une nouvelle géométrie avec des chaînes de lignes contenant uniquement l'ID source et cible. Cela devrait ressembler à votre deuxième image.
dkastl

Le problème est que les lignes sont segmentées (si vous regardez la première image que j'ai postée, chaque point que vous voyez commence / termine un nouveau segment), votre approche simplifie la géométrie (ce qui est bien) mais pas la topologie.
chriserik

1
Je ne pense pas qu'il soit évident d'après votre image que chaque point commence une nouvelle géométrie de chaîne de lignes. Avez-vous déjà exécuté la fonction assign_vertex_id de pgRouting pour remplir les colonnes source / cible? Dans ce cas, vous pouvez ultérieurement effectuer certaines requêtes pour identifier les ID source / cible qui n'existent que deux fois, ce qui signifie que vous devriez pouvoir fusionner les deux segments de ligne à ce stade. Si l'ID source / cible existe plus de deux fois, il doit s'agir d'une intersection.
dkastl

@dkastl: Une très bonne idée! J'ai mis à jour ma question en montrant jusqu'où j'en suis arrivé.
chriserik

Réponses:


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.