1. Crear una topología de red

../_images/network.png

osm2pgrouting es una herramienta conveniente y su enfoque es trabajar con datos de OpenStreetMap. Hay varios casos en los que osm2pgrouting no se puede utilizar. Algunos datos de red ya vienen con una topología de red que se puede usar con pgRouting out-of-the-box. A menudo, los datos de red se almacenan en formato de archivo Shape (.shp) y podemos usar el convertidor de PostGIS” shp2pgsql para importar los datos a una base de datos PostgreSQL.

¿Pero qué hacer entonces?

En este capítulo aprenderá a crear una Topología de Red de Ruteo básica a partir de datos de red que no tiene una Topología de ruteo crear los atributos mínimos necesarios para la Topología de Red de Ruteo.

1.1. Cargar los datos de la red

Al principio cargaremos datos de muestra de OpenStreetMap con osm2pgsql.

CITY="DS_TZ"
cd ~/Desktop/workshop
cp ~/data/osm/$CITY.osm.bz2 .

createdb -U user osm_data
psql -U user -d osm_data -c "CREATE EXTENSION postgis;"
psql -U user -d osm_data -c "CREATE EXTENSION pgrouting;"
osm2pgsql -U user -c -d osm_data --latlong --cache 5 --cache-strategy sparse $CITY.osm.bz2

Veamos qué tablas se han creado:

Ejecutar: psql -U user -d osm_data -c "\d"

La tabla que contiene los datos de la red de carreteras tiene el nombre planet_osm_roads. Consta de una gran cantidad de atributos.

Ejecutar: psql -U user -d osm_data -c "\d planet_osm_roads"

Es común que datos de la red carretera proporcionen al menos la siguiente información:

  • ID del Camino (gid)

  • Clase de camino (class_id)

  • Longitud del camino (length)

  • Nombre del camino (name)

  • Geometría del camino (the_geom)

Esto permite para visualizar la red de carreteras como una capa PostGIS en software GIS, por ejemplo en QGIS. Aunque no es suficiente para el enrutamiento, porque no contiene información de la topología de red.

Los pasos siguientes utilizarán la herramienta de línea de comandos PostgreSQL.

psql -U user osm_data

1.2. Crear una Topología de Red de Ruteo

Tener los datos importados en una base de datos PostgreSQL puede requerir un paso más para pgRouting.

Asegurarse de que los datos proporcionan una correcta Red Topológica de ruteo que consta de información sobre los identificadores de origen y destino para cada vínculo de carretera. Los resultados anteriores muestran que la topología de red no tiene ninguna información de origen y destino.

Es necesaria la creación de la Topología de Red de Ruteo.

Advertencia

La topología postGIS no es adecuada para ruteo.

pgRouting proporciona una forma general de crear la Topología de Red de Ruteo con la función pgr_createTopology .

Esta función:

  • Asigna identificadores de source y target a cada enlace de carretera

  • Puede «ajustar» lógicamente los vértices cercanos dentro de una cierta tolerancia asignando el mismo identificador.

  • Crea una tabla de vértices relacionada con ella.

  • Crea los índices básicos.

pgr_createTopology('<table>', <tolerance>, '<geometry column>', '<gid>')

Para obtener más información, consultar pgr_createTopology.

Primero, agregar la columna de origen y destino y, a continuación, ejecutar la función pgr_createTopology … esperar.

  • Dependiendo del tamaño de la red, este proceso puede tardar de minutos a horas.

  • Indicador de progreso se puede leer con PostgreSQL NOTICE

  • También requerirá suficiente memoria (partición RAM o SWAP) para almacenar datos temporales.

La dimensión del parámetro de tolerancia depende de la proyección de datos. Por lo general, son «grados» o «metros». En nuestro ejemplo, la proyección de datos de geometría para determinar la tolerancia:

SELECT find_srid('public','planet_osm_roads','way');
find_srid
-----------
    4326
(1 row)

En base a este resultado, la tolerancia será 0.00001

-- Add "source" and "target" column
ALTER TABLE planet_osm_roads ADD COLUMN "source" integer;
ALTER TABLE planet_osm_roads ADD COLUMN "target" integer;

-- Run topology function
SELECT pgr_createTopology('planet_osm_roads', 0.00001, 'way', 'osm_id');

1.3. Verifique la Topología de Red de Ruteo

Para verificar que hay una Topología de Red de Ruteo básica:

\d planet_osm_roads

También se creó una nueva tabla que contiene la información de vértices:

\d planet_osm_roads_vertices_pgr
  • id es el identificador de vértice

  • the_geom es la geometría considerada para ese identificador de vértice en particular.

  • source y target del planet_osm_roads corresponden a un id en la tabla planet_osm_roads_vertices_pgr

  • Las columnas adicionales son para analizar la topología.

Ahora estamos listos para nuestra primera consulta de enrutamiento con pgr_dijkstra

1.4. Analizar y ajustar la Topología de Red de Ruteo

Analizando la topología con pgr_analyzeGraph:

SELECT pgr_analyzeGraph('planet_osm_roads', 0.000001, the_geom := 'way', id := 'osm_id');

Ajustar la topología no es una tarea fácil:

  • ¿Es un segmento aislado un error en los datos?

  • ¿Es un segmento aislado porque está en el borde del cuadro delimitador?

  • ¿Las brechas potenciales encontradas cerca de los sin salida porque la tolerancia era demasiado pequeña?

  • ¿Las intersecciones son verdaderas intersecciones y necesitan ser admitidas?

  • ¿Las intersecciones son puentes o túneles y no necesitan ser admitidos?

Dependiendo de la aplicación es necesario realizar algunos ajustes.

algunas funciones de topology manipulation ayudan a detectar y reparar algunos errores topológicos en los datos.