La nueva capa ejes_noded dispone de 46841 tramos y la original de ejes tenía 10050.
La nueva tabla no incorpora los campos name y oneway que vamos a necesitar, pero sí incorpora un campo llamado old_id que hace referencia al gid de la tabla ejes y por lo tanto podemos relacionar ambas tablas. Para facilitar el análisis vamos a añadir estos dos campos y actualizarlos en la tabla ejes_noded.
routing1=# alter table ejes_noded add column name text;
routing1=# alter table ejes_noded add column oneway integer;
routing1=# update ejes_noded set name = ejes.name,
oneway = ejes.oneway
from ejes where ejes.gid = ejes_noded.old_id;
La tabla ejes_noded ya está preparada para utilizer las funciones de pgrouting. Como anteriormente, primero calcularemos los nodos con pgr_createTopology y luego procederemos al cálculo de una ruta.
routing1=# select pgr_createTopology('ejes_noded',0.01,'geom',
'id','source','target');
Agregamos los campos de los costes y calculamos los costes en función de la dirección del campo oneway. En este caso los costes van a ser las distancias en metros de los tramos.
routing1=# alter table ejes_noded add column cost double precision;
routing1=# alter table ejes_noded
add column reverse_cost double precision;
routing1=# update ejes_noded set
cost = case when oneway = -1 then –st_length(geom)
else st_length(geom)
end,
reverse_cost = case when oneway = 1 then -st_length(geom)
else st_length(geom)
end;
Como estamos en la misma zona del núcleo de valencia, vamos a repetir una de las rutas realizadas anteriormente.
Calcula la longitud y número de tramos atravesados de la ruta más óptima utilizando el algoritmo A-Star, entre el nodo source de la calle ‘Pilota Valenciana’ al nodo target de la calle ‘Ueshiba’:
routing1=# select source from ejes_noded
where name like '%Ueshiba%' limit 1;
--------
11367
routing1=# select source from ejes_noded
where name like '%Pilota Valenciana%' limit 1;
--------
20259
routing1=# select sum(cost) as costetotal,count(*) as tramos
from pgr_dijkstra ('select id, source, target, cost,
reverse_cost from ejes_noded', 11367, 20259, true);
costetotal | tramos
------------------+--------
7008.06063721362 | 187
Como se aprecia la longitud total de la ruta es parecida a los 7267 m. del ejemplo previo.
Ver aquí la parte anterior de este taller
Ver aquí la parte primera de este taller.
