Si contamos con una grafo de calles que tenga una integridad en la digitalización, o lo que es lo mismo, que esté bien digitalizado, lo podemos convertir en una red con lógica de red para ser usado con el complemento de pgRouting de postGIS desde QGIS.
Lo primero que se necesita es crear una base de datos en Postgres y dotarle de las extensiones de PostGIS y de pgRouting. La primera nos dará la componente geográfica a la base de datos y la segunda nos permitirá lo primero conocer los nodos inicial («source«) y final («target«) de cada arco, y después utilizar los algoritmos de enrutamiento que tiene la extensión.
Para ello, con una base de datos alojada en Postgres creamos las dos extensiones con el siguiente comando en la ventana del creador de consulta SQL de pgAdmin III de Postgres:
Posteriormente importamos el grafo que queremos convertir a red con lógica de red con la funcionalidad «PostGIS Shapefile Import/Export Manager» (teniendo especial cuidado con las coordenadas).
En análisis de redes siempre se realiza de un nodo inicial a uno final pasando por un arco, con lo cual es necesario que la capa del grafo tenga ese nodo inicial y final y contar con esa capa de nodos. Para ello se utiliza un comando de pgRouting que nos da esos nodos utilizando la geometría de la capa (obtenida gracias a la extensión PostGIS) y el id de los nodos, «pgr_createTopology«, siempre se deberá contar con un atributo en la capa de nodo inicial («source») y nodo final («target»):
Siendo «lastablassp» nuestro grafo.
Para poder realizar el análisis necesitamos una impedancia o el coste de la operación. Lo normal es que sea el tiempo de viaje en un determinado modo de transporte. Esto lo calculamos en otro atributo llamado «cost«.
Con esto tenemos nuestra red con lógica de red lista para ser consumida por pgRouting, puesto que conoce los nodos de cada arco y tiene el costo de recorrer el arco entre esos nodos. El uso de los algoritmos se podría hacer desde el propio pgAdmin III, pero el resultado sería una tabla de recorridos poco visual.
Si se conecta la base de datos Postgres/PostGIS a QGIS se puede consumir la red con el complemento «pgRouting Layer«.
Con la conexión establecida cargamos la capa y activamos el panel de pgRouting Layer, y vamos a realizar la ruta entre el nodo 503 y el 910 con el algoritmo Dijsktra.
Para ello seleccionamos el algoritmo, el nodo inicial («source_id») y el nodo final («target_id») y pulamos en «Preview».
Se nos mostrará en la pantalla la ruta más corta entre esos dos puntos con el menor coste.
Se puede dar el caso de que tengamos una restricción o giro prohibido, por ejemplo entre el nodo 808 y el destino final el nodo 910.
Para ello se utiliza una tabla de giros y se puede usar el algoritmo «trsp (vertex)» en donde se determina el arco y el nodo por el que no se puede pasar. Al resolver el análisis se obtiene una ruta diferente.
En estas dos imágenes se puede ver la diferencia en el trazado de las rutas.
Como se observa los algoritmos de pgRouting son muy ágiles en la búsqueda de la ruta más corta, pero siempre tendrán que estar las capas alojadas en una base de datos Postgres/PostGIS.
Por qué al cargar capa desde postgis a qgis, no puede seleccionarse la base de datos en pgrouting layer? Database no me da la opción de seleccionar dicha base de datos
Buenas Pedro,
Al hacer la conexión de la base de datos de PostGIS a QGIS se piden las credenciales (usuario y contraseña). En ese formulario se deben activar los check de «guardar credenciales» (para el usuario y la contraseña).
Un saludo, Ricardo.