Esta pregunta está más relacionada con recursos que quizás aún no haya identificado, aunque he estado buscando en la web por un tiempo.
En el proyecto en el que estoy trabajando en este momento, necesito ejecutar un algoritmo de ruta más corta en un gráfico que represente salas de oficinas, pasillos, escaleras, ascensores y rutas entre edificios.
Para la capa de presentación, pensé en usar secuencias de comandos de Python con MapServer, pero ahora estoy pensando más sobre cómo construir el gráfico a partir de los (shapefiles convertidos en a) postGIS db generado desde OpenEV para que sea fácil agregar y quitar bordes o pesos o información sobre los puntos posteriores.
Para Python hay un módulo llamado networkX que se ocupa de los gráficos, y aunque este problema se ha planteado en stackexchange aquí , el gráfico que estoy tratando de construir no es un dígrafo sino indirecto.
Actualización: hace 5 días se agregó la red de servicios públicos de Ben Reilly al proyecto networkX. Utilitynetwork crea un gráfico dirigido a partir de las características del archivo shape.
Las preguntas siguen abiertas para un enfoque similar de las características de lectura de la base de datos postGIS.
Respuestas:
NetworkX tiene un método para convertir gráficos dirigidos en gráficos no dirigidos .
Además, el código para leer un shapefile (o directorio de shapefiles) realmente no necesita generar un gráfico dirigido, eso es justo lo que necesitaba en ese momento. No lo he intentado, pero reemplazando la línea única:
... podría hacer el truco.
Parece que NetworkX admitirá la lectura de archivos de forma listos para usar (con OGR) en 1.4 ( función ).
fuente
¿Has estudiado el uso de pgRouting?
http://www.pgrouting.org/docs/howto/topology.html#graphs-directed-undirected-reverse-costs
fuente
No estoy seguro de qué tan interesado está en usar otros marcos, o si ya ha resuelto esto, pero el proyecto Geodjango agrega características ORM realmente agradables a los modelos de datos GIS, para una variedad de bases de datos habilitadas para SIG, incluidos postgres con los enlaces PostGIS instalados .
El enlace Geodjango está aquí: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview
Tenga en cuenta que Django es un marco web para python, geodjango se encargó de editar y mostrar datos SIG para el desarrollo web de back-end, pero también ofrece un conjunto de clases mucho más intuitivo y poderoso que los enlaces directos de Python OGR (mucho más 'pythonic' en lugar de directamente 'convertido desde la sintaxis C', por ejemplo, puede crear una clase django.contrib.gis.geos.linestring.LineString directamente en lugar de crear una clase ogr.Geometry con constante wkbLineString en el constructor).
En el tutorial de geodjango ubicado: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/
Los pasos necesarios para configurar la lectura / escritura desde su base de datos Postgres son tan simples como usar otros modelos de django python, el dolor de cabeza es configurar su base de datos geoespaciales. Entonces, para cargar datos en la base de datos postgres, vea el enlace de anclaje #layermapping en el tutorial anterior; es un mapeo de campo entre los datos disponibles en el archivo de forma a las columnas de la base de datos configuradas para su modelo de datos.
Como mínimo, me tomaría de 2 a 3 horas revisar el tutorial y configurar los enlaces PostGIS y ver si esta herramienta GIS es lo que está buscando.
Tenga en cuenta también que cuando tiene una base de datos habilitada para SIG (por ejemplo, enlaces PostGIS para pgsql) puede hacer 'contiene' 'dentro de' directamente en los datos de geometría de la base de datos (Líneas / Polígonos) utilizando las funciones almacenadas de la base de datos (por ejemplo
ST_Contains(...)
: vea el ejemplo de SQL para postgis / pgsql aquí: http://postgis.refractions.net/docs/ch04.html#id2639062 ... y lo mejor de Geodjango es que está optimizado para hacer estas búsquedas espaciales por usted .fuente