Archivo de la etiqueta: QGIS

Rutas en PostGIS con la nueva versión de Pgrouting (parte 4/4): Nodificando una red

 

En esta serie de artículos sobre Pgrouting muestro el funcionamiento básico de esta biblioteca de rutas que trabaja sobre PostGIS.

Trato de actualizar el capítulo F.11 del libro de PostGIS, que al utilizar la versión anterior de pgrouting se ha quedado obsoleto.

Este material ha sido realizado por José Carlos Martínez y se publica mediante licencia Creative Commons cc_byncsa


Utilización de cartografía sin estructura de red

Si se desea utilizar cualquier capa de vías de comunicación o cualquier tipo de red que no se encuentre en formato OSM no se podrá utilizar el comando osm2pgrouting y si dicha cartografía no está estructurada según una topología de red (intersecciones en los cruces), será necesario nodificar la red. PAra ello pgrouting dispone del comando pgr_nodenetwork y que utilizaremos en este apartado. Tambíen y como solución alternativa podríamos utilizar los scripts que desarrollamos en el apartado E 2.4, pág. 270, ‘creación de nodos en las intersecciones’. En efecto, este script numera los nodos inicial y final de los tramos pero además parte los tramos lineales en los puntos de intersección con otros tramos, permitiendo utilizar cualquier cartografía con pgrouting.

En este apartado vamos a utilizar otro tipo de cartografía que presenta las siguientes características:

  • No tiene intersecciones en los cruces.
  • Está en coordenadas geográficas en WGS84.
  • Hay un campo llamado oneway el mismo contenido que el explicado en OSM.

Con un CRS en coordenadas geográficas cualquier análisis espacial o cálculo de la longitud de los tramos utilizando geometría plana es totalmente incorrecto y carece de sentido físico. Por lo tanto si se desea realizar análisis espacial con esta cartografía es necesario reproyectar nuestros datos a un CRS apropiado.

En el apartado anterior no hicimos dicha reproyección, debido a que osm2pgoruting tiene el detalle de calcular los campos length_m sobre el esferoide. Aun así, las coordenadas x1, y1, x2 e y2 utilizadas en algunos algoritmos de pgrouting vienen dadas en geográficas lo cual puede dar lugar a problemas.

Se podría estar tentado a proyectar los datos al CRS EPSG: 3857 o proyección esférica de mercator[1] que es precisamente la proyección que utilizan muchos de los programas que visualizan cartografía en la web (como Google Maps) y la que por ejemplo utiliza la herramienta osm2pgsql por defecto. En tal caso, aunque nos estaríamos acercando a la realidad aún se estaría cometiendo un error no despreciable para utilizar los datos OSM con pgrouting.

Como demostración vamos a calcular la longitud de un tramo entre dos puntos dentro del casco urbano de la ciudad de Valencia.

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

 

En esta serie de artículos sobre Pgrouting muestro el funcionamiento básico de esta biblioteca de rutas que trabaja sobre PostGIS.

Trato de actualizar el capítulo F.11 del libro de PostGIS, que al utilizar la versión anterior de pgrouting se ha quedado obsoleto.

Este material ha sido realizado por José Carlos Martínez y se publica mediante licencia Creative Commons cc_byncsa


Utilización de datos OSM

Los datos OSM por su naturaleza y por ser datos cartográficos libres son ideales para utilizarlos en programas de cálculo de rutas. En el apartado F 10, pág. 301 se estudió como importar datos OSM a PostGIS utilizando los cargadores osm2pgsql y osmosis.

También acabamos de ver que la función pgr_createTopology de pgrouting crea topología de red de una capa lineal, siempre que no existan intersecciones entre los tramos (ver pág. 309), y es precisamente esta condición la que no cumple los datos OSM. Efectivamente un tramo (way) OSM puede estar formado por más de dos nodos, donde los nodos intermedios pueden formar parte de otros tramos, por lo tanto es necesario partir dichos tramos para que únicamente sus nodos inicial y final sean los que conectan con otros tramos.

La figura siguiente (izquierda) muestra como en la cartografía OSM importada con oms2pgsql los tramos lineales OSM (ways) se cruzan entre sí sin crear nodos en las intersecciones, por el contrario la cartografía de la figura de la derecha muestra como la cartografía OSM importada con osm2pgrouting ha partido dichos tramos lineales creando nuevos registros en la tabla. Los dos tramos lineales (2 filas) de la figura de la izquierda (tramos resaltados) se han transformado en 9 tramos lineales (9 filas) en la figura de la derecha.

pgrouting5

Nodificación de cartografía OSM

Osm2pgrouting

El comando de utilidad osm2pgrouting[1] se puede instalar desde repositorios de terceros en distribuciones Ubuntu o mediante paquetes rpm para distribuciones Fedora. En MS Windows este comando se distribuye ya de forma oficial con la instalación de PostGIS. En otras distribuciones de Linux así como para obtener una versión más reciente puede ser necesaria su compilación a partir del código fuente.

Osm2pgrouting se ejecuta desde línea de comandos en una terminal del sistema. Las opciones del comando son:

  • file <fichero osm>: Nombre del fichero xml OSM a importar.
  • conf <fichero de configuración>: Ruta al archivo de configuración de osm2pgrouting. Generalmente este archivo es xml y se distribuye al instalar osm2pgrouting.
  • –skipnodes
    : Si es true no importa los nodos OSM.
  • clean
    : Elimina las tablas instaladas en un proceso de osm2pgrouting

 Opciones de conexión a PostgreSQL:

  • d <base de datos>: Nombre de la base de datos en la cual cargar las capas OSM.
  • u <usuario>: Usuario de la base de datos.
  • passwd <contraseña>: Contraseña de la conexión a la base de datos.
  • h <host>: Host de la máquina donde está el servidor de PostgreSQL. Por defecto es 127.0.0.1.
  • p <puerto>: Número de puerto para la conexión. Por defecto es 5432.