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.

pgrouting_ruta_optima

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:

pgrouting_ruta_optima_1

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).

pgrouting_ruta_optima_2

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”):

pgrouting_ruta_optima_3

Siendo “lastablassp” nuestro grafo.

pgrouting_ruta_optima_4
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.

pgrouting_ruta_optima_5

Si se conecta la base de datos Postgres/PostGIS a QGIS se puede consumir la red con el complemento “pgRouting Layer“. pgrouting_ruta_optima_6

pgrouting_ruta_optima_7

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.

pgrouting_ruta_optima_8

pgrouting_ruta_optima_9

Para ello seleccionamos el algoritmo, el nodo inicial (“source_id”) y el nodo final (“target_id”) y pulamos en “Preview”.

pgrouting_ruta_optima_10

Se nos mostrará en la pantalla la ruta más corta entre esos dos puntos con el menor coste.

pgrouting_ruta_optima_11
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.

pgrouting_ruta_optima_12
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.

pgrouting_ruta_optima_13
En estas dos imágenes se puede ver la diferencia en el trazado de las rutas.

pgrouting_ruta_optima_14

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.

 

 

Formación de calidad impartida por profesionales

QGIS_redes_transporte_online