¿Cómo convertir características simples de línea a red topológica?
12
usando Gdal / OGR, ¿hay alguna forma de convertir una capa de línea shp, kml o PostGIS en una red de nodos y segmentos para que pueda usarse en paquetes como networkx?
Probablemente valga la pena señalar que, si bien OGR y NetworkX dicen que son compatibles GML, el primero se refiere al Geography Markup Languagesegundo Graph Modelling Language.
Es un trato horrible. Entonces, ¿cómo puedo hacer un análisis de red?
dassouki
@dassouki - ¡Comienza un proyecto de código abierto! Está en mi lista, pero muy por el momento. Sin embargo, me gustaría tener la oportunidad de colaborar en esto si hay otros interesados.
fmark
@fmark ya tiene
transpotools.com
@dassouki - ¡Suena emocionante! ¿En qué etapa se encuentra el proyecto? La página de inicio dice TranspoTools Will be here shortly. ¿Hay algún código en el repositorio de código de google? Todo lo que pude ver estaba vacío.
fmark
@dassouki: solo para confirmar, no sé mucho sobre el campo de análisis de transporte (mi interés SIG no está mucho más allá del cálculo de la distancia de red en esta etapa), pero estaría encantado de colaborar en una ogr2networkxherramienta de tipo.
fmark
2
No ha mencionado específicamente qué tipo de análisis de red desea hacer, pero si está interesado en el enrutamiento, hay un par de opciones:
PgRouting http://pgrouting.postlbs.org/ trabaja con datos en PostGIS para hacer análisis de enrutamiento. Admite los algoritmos Dijkstra de ruta más corta, ruta A más corta *, estrella fugaz de ruta más corta y vendedor ambulante (TSP). También hace cálculos de distancia de conducción. Puede encontrar una lista de aplicaciones de ejemplo que utilizan PgRouting en http://pgrouting.postlbs.org/wiki/pgRoutingDemo PgRouting conduce la http://www.ridethecity.com/aplicación Ride the City .
El proyecto OpenRouter http://wiki.osgeo.org/wiki/OpenRouter. Este proyecto parece interesante, pero no particularmente maduro en este momento.
(Disculpas por las URL citadas, pero no tengo suficiente crédito para publicar> 1 URL ...)
+1 para ti Estoy buscando alejarme de los datos de openstreet y postgis debido a las limitaciones de datos y al hecho de que estamos abandonando los postgis por ahora. Por lo general, proporcionamos nuestros propios datos que son mucho mejores que Openstreet, pero al mismo tiempo no queremos limitarnos a hacer pgrouting. El otro problema es que digamos que queremos implementar una recolección de basura pitón o compatible con arcgis o problemas con el cartero chino o el vendedor de Traveler.
dassouki
¿Has mirado en SpatiaLite? Esto le daría una base de datos espacial OpenSource que se basa en archivos y es independiente de la plataforma. No lo he usado, pero parece que hay capacidad de enrutamiento con SpatiaLite < gaia-gis.it/spatialite/spatialite-network-2.3.1.html >
DavidF
Además, gracias por llamar mi atención sobre NetworkX. Este parece ser un módulo de Python realmente genial.
DavidF
2
Creo que la respuesta depende. La mayoría de los formatos SIG no incluyen explícitamente información de adyacencia (por ejemplo, no hay indicadores en un .shp lleno de características de línea simples para indicar que dos características comparten un punto final común), lo que es un factor decisivo para leerlos directamente en una red.
Desde un vistazo rápido al código, parece que el paquete de red de servicios públicos vinculado por scw volverá a descubrir esa información solo si los puntos finales son idénticos bit por bit. ¡Esto podría ser lo suficientemente bueno para la mayoría de las necesidades, incluida la suya! (Podría estar equivocado sobre esto, ya que de hecho fue solo un vistazo superficial).
Para algo más robusto, por ejemplo, es posible que desee crear nuevos nodos en la red donde se crucen dos bordes, o le gustaría manejar perturbaciones que hacen que los puntos finales superpuestos sean muy diferentes, tendrá que buscar un enfoque que inspecciona la geometría más profundamente.
He hecho algo similar con Boundary Generator para recuperar información de adyacencia de red de polígonos: plataforma incorrecta, lenguaje y primitivo geométrico para ti, desafortunadamente. Sin embargo, puede ser perspicaz sobre cómo abordar los problemas de robustez.
+1 ... ¿No estoy seguro de qué quieres decir con la plataforma incorrecta? Entiendo su explicación, y realmente me sorprende que no pueda convertir los datos en nodos y pesos. los únicos 2 programas que hacen eso desde archivos shp son TransCAD y EMME2 / 3
dassouki
Por "plataforma incorrecta" me refería a que Boundary Generator fue escrito para el entorno ArcGIS, al menos por ahora. :) Necesitaría alguna adaptación para trabajar con OGR. (También se necesitaría una cantidad significativa de código nuevo para descubrir puntos finales coincidentes de las líneas, en lugar de bordes coincidentes de los polígonos. Podría agregar esto a la próxima versión si tengo tiempo. Parece que podría ser muy útil .)
GML
, el primero se refiere alGeography Markup Language
segundoGraph Modelling Language
.Respuestas:
Ben Reilly publicó recientemente un enlace en otra pregunta a su paquete Python de red de servicios públicos , que utiliza los enlaces OGR para convertir datos en Networkx DiGraphs .
fuente
A juzgar por la lista de networkx de formatos de gráficos importables y formatos compatibles con GDAL , dudo que tal conversión sea posible.
fuente
TranspoTools Will be here shortly
. ¿Hay algún código en el repositorio de código de google? Todo lo que pude ver estaba vacío.ogr2networkx
herramienta de tipo.No ha mencionado específicamente qué tipo de análisis de red desea hacer, pero si está interesado en el enrutamiento, hay un par de opciones:
PgRouting http://pgrouting.postlbs.org/ trabaja con datos en PostGIS para hacer análisis de enrutamiento. Admite los algoritmos Dijkstra de ruta más corta, ruta A más corta *, estrella fugaz de ruta más corta y vendedor ambulante (TSP). También hace cálculos de distancia de conducción. Puede encontrar una lista de aplicaciones de ejemplo que utilizan PgRouting en
http://pgrouting.postlbs.org/wiki/pgRoutingDemo
PgRouting conduce lahttp://www.ridethecity.com/
aplicación Ride the City .El proyecto OpenRouter
http://wiki.osgeo.org/wiki/OpenRouter
. Este proyecto parece interesante, pero no particularmente maduro en este momento.(Disculpas por las URL citadas, pero no tengo suficiente crédito para publicar> 1 URL ...)
fuente
Creo que la respuesta depende. La mayoría de los formatos SIG no incluyen explícitamente información de adyacencia (por ejemplo, no hay indicadores en un .shp lleno de características de línea simples para indicar que dos características comparten un punto final común), lo que es un factor decisivo para leerlos directamente en una red.
Desde un vistazo rápido al código, parece que el paquete de red de servicios públicos vinculado por scw volverá a descubrir esa información solo si los puntos finales son idénticos bit por bit. ¡Esto podría ser lo suficientemente bueno para la mayoría de las necesidades, incluida la suya! (Podría estar equivocado sobre esto, ya que de hecho fue solo un vistazo superficial).
Para algo más robusto, por ejemplo, es posible que desee crear nuevos nodos en la red donde se crucen dos bordes, o le gustaría manejar perturbaciones que hacen que los puntos finales superpuestos sean muy diferentes, tendrá que buscar un enfoque que inspecciona la geometría más profundamente.
He hecho algo similar con Boundary Generator para recuperar información de adyacencia de red de polígonos: plataforma incorrecta, lenguaje y primitivo geométrico para ti, desafortunadamente. Sin embargo, puede ser perspicaz sobre cómo abordar los problemas de robustez.
fuente
Hay algún código geodjango en MarineMap que podría ser adaptable para la tarea.
fuente