Comment convertir des fonctionnalités simples de ligne en réseau topologique?

12

en utilisant Gdal / OGR, existe-t-il un moyen de convertir une couche de ligne shp, kml ou PostGIS en un réseau de nœuds et de segments afin qu'elle puisse être utilisée dans des packages tels que networkx?

dassouki
la source
2
Il est probablement intéressant de noter que même si OGR et NetworkX disent tous deux qu'ils prennent en charge GML, le premier fait référence Geography Markup Languagetandis que le second l'est Graph Modelling Language.
fmark

Réponses:

2

À en juger par la liste networkx des formats de graphiques importables et des formats pris en charge par GDAL , je doute qu'une telle conversion soit possible.

obscur
la source
c'est une affaire merdique. Alors, comment puis-je faire une analyse de réseau?
dassouki
@dassouki - Démarrez un projet open source! C'est sur ma liste, mais en bas pour le moment. J'aimerais avoir la possibilité de collaborer à ce sujet si d'autres sont intéressés.
fmark
@fmark a déjà transpotools.com
dassouki
@dassouki - Cela semble excitant! À quelle étape en est le projet? La page d'accueil dit TranspoTools Will be here shortly. Y a-t-il du code dans le référentiel de codes Google? Tout ce que je pouvais voir était vide.
fmark
@dassouki - Pour confirmer, je ne connais pas grand-chose au domaine de l'analyse des transports (mon intérêt SIG ne se situe pas beaucoup plus loin que le calcul de la distance du réseau à ce stade), mais je serais heureux de collaborer sur un ogr2networkxoutil de type.
fmark
2

Vous n'avez pas mentionné spécifiquement le type d'analyse de réseau que vous souhaitez faire, mais si vous êtes intéressé par le routage, il existe deux options:

PgRouting http://pgrouting.postlbs.org/ fonctionne avec les données de PostGIS pour effectuer une analyse de routage. Il prend en charge les algorithmes Shortest Path Dijkstra, Shortest Path A *, Shortest Path Shooting Star et Traveling Salesperson (TSP). Il effectue également des calculs de distance de conduite. Une liste d'exemples d'applications utilisant PgRouting peut être trouvée sur http://pgrouting.postlbs.org/wiki/pgRoutingDemo PgRouting conduit l'application Ride the City http://www.ridethecity.com/.

Le projet OpenRouter http://wiki.osgeo.org/wiki/OpenRouter. Ce projet semble intéressant, mais pas particulièrement mature à ce stade.

(Toutes mes excuses pour les URL citées, mais je n'ai pas assez de crédit pour poster> 1 URl ...)

DavidF
la source
+1 pour vous. Je cherche à m'éloigner des données openstreet et postgis en raison des limitations de données et du fait que nous abandonnons les postgis pour l'instant. Nous fournissons généralement nos propres données bien mieux qu'Openstreet, mais en même temps, nous ne voulons pas nous limiter au pgrouting. L'autre problème est que, disons, nous voulons implémenter un ramasse-miettes compatible avec Pythonic ou ArcGis ou des problèmes avec un vendeur chinois ou un vendeur.
dassouki
Avez-vous regardé SpatiaLite? Cela vous donnerait une base de données spatiale OpenSource qui, si elle est basée sur un fichier et indépendante de la plate-forme. Je ne l'ai pas utilisé, mais il semble qu'il existe une capacité de routage avec SpatiaLite < gaia-gis.it/spatialite/spatialite-network-2.3.1.html >
DavidF
Merci également d'avoir porté NetworkX à mon attention. Cela ressemble à un module Python vraiment cool.
DavidF
2

Je pense que la réponse dépend. La plupart des formats SIG n'incluent pas explicitement les informations de contiguïté (par exemple, il n'y a pas d'indicateurs dans un fichier .shp plein de fonctionnalités de ligne simples pour indiquer que deux fonctionnalités partagent un point de terminaison commun), ce qui est un facteur décisif pour les lire directement dans un réseau.

D'un coup d'œil rapide au code, il semble que le package UtilityNetwork lié par scw ne redécouvre ces informations que si les points de terminaison sont bit à bit identiques. Cela pourrait être suffisant pour la plupart des besoins, y compris le vôtre! (Je peux me tromper à ce sujet, car il ne s'agissait en fait que d'un coup d'œil rapide.)

Pour quelque chose de plus robuste - par exemple, vous souhaiterez peut-être créer de nouveaux nœuds dans le réseau où deux bords se croisent, ou vous souhaitez gérer les perturbations qui rendent les points d'extrémité qui se chevauchent très légèrement différents - vous devrez chercher une approche qui inspecte la géométrie plus en profondeur.

J'ai fait quelque chose de similaire avec Boundary Generator pour récupérer les informations de contiguïté du réseau à partir des polygones: plate-forme, langage et primitive géométrique incorrects pour vous, malheureusement. Cependant, il peut être utile de savoir comment aborder les problèmes de robustesse.

Dan S.
la source
+1 ... Je ne sais pas ce que vous entendez par la mauvaise plateforme? Je comprends votre explication, et ça souffle vraiment que je ne puisse pas convertir les données en nœuds et en poids. les deux seuls programmes qui font cela à partir des fichiers shp sont TransCAD et EMME2 / 3
dassouki
Par «mauvaise plate-forme», je voulais simplement dire que Boundary Generator a été écrit pour l'environnement ArcGIS, du moins pour l'instant. :) Il faudrait une certaine adaptation pour fonctionner avec OGR. (Il faudrait également un peu de nouveau code pour découvrir les extrémités coïncidentes des lignes, par opposition aux arêtes coïncidentes des polygones. Je pourrais l'ajouter à la prochaine version si / quand j'en ai le temps. Il semble que cela pourrait être très utile .)
Dan S.
0

Il y a du code geodjango dans MarineMap qui pourrait être adaptable pour la tâche.

fmark
la source
cool, nous pouvons en discuter pour atteindre votre objectif de ogr2netx ahmed à elegantdesigns.ca
dassouki