Rutas en PostGIS con la nueva versión de Pgrouting (parte 3/4): osm2pgrouting

routing1=# create table ruta1 (gid serial, vertex_id integer, 
  geom geometry (MultilineString, 0));
routing1=# insert into ruta1 (vertex_id, geom) 
  select ways.gid, st_multi(ways.the_geom) from 
  pgr_dijkstra ('select gid as id, source, target, abs(cost_s) as cost 
    from ways', 12662, 4721, false), ways 
  where ways.gid = edge;
  
routing1=# create table ruta2 (gid serial, vertex_id integer, 
  geom geometry (MultilineString, 0));
routing1=# insert into ruta2 (vertex_id, geom) 
  select ways.gid, st_multi(ways.the_geom) from 
  pgr_dijkstra ('select gid as id, source, target, cost_s as cost, 
    reverse_cost_s as reverse_cost from ways', 12662, 4721, true), ways 
  where ways.gid = edge;

 

Se han elegido dos nodos alejados dentro del núcleo urbano. La figura siguiente muestra la cartografía y las dos rutas calculadas.

pgrouting3

Por último, el número de tramos, coste total en segundos y longitud total en metros (nótese que utilizamos la función st_length pero convertimos la geometría al tipo geography. La función ST_Length está sobrecargada de forma que si el argumento es de tipo geography calcula la distancia correctamente cuando las unidades son longitud y latitud sobre WGS 84.

routing1=# select count(*),sum(st_length(geom::geography)),
              sum(coste) from ruta1;
 count |       sum        |  sum
-------+------------------+--------
   103 | 6868.28334086638 | 528.33
routing1=# select count(*),sum(st_length(geom::geography)),
              sum(coste) from ruta2;
 count |       sum        |   sum
-------+------------------+---------
   149 | 7267.45297072252 | 566.014

 

Si se desea, también se podrían aplicar pesos a las distancias de los tramos (costes con pesos) con el fin de valorar alguna otra variable (workshop de los congresos FOSS4G[1].

En cualquier caso y lo más importante sin duda, es que el lector trate de averiguar si algunos de los servicios online de navegación (routing) ofertados actualmente[2] (OpenRoute Service, CycleStreets, etc.) con cartografía de OSM cubren sus necesidades, el ejemplo realizado anteriormente solo es una aproximación grosera, ya que habría que establecer correctamente las restricciones de giro y comprobar si los tramos segmentados en realidad solo se cruzaban.

 Ver aquí la parte anterior de este taller

Ver aquí la parte siguiente de este taller

 

Para comprender adecuadamente la biblioteca Pgrouting y poder utilzarla junto con la potencia de PostGIS se necesitan conocimientos sobre este último. Se pueden adquirir en el curso online de gran éxito de CartoSiG UPV.