2. Apéndice: Herramienta de Importación osm2pgrouting

osm2pgrouting es una herramienta de línea de comandos que permite importar datos de OpenStreetMap a una base de datos pgRouting. Crea automáticamente la topología de red de ruteo y crea tablas para atributos de tipos y clases de caminos.

Nota

Hay algunas limitaciones, especialmente con respecto al tamaño de la red. La forma de manejar conjuntos de datos grandes es la versión actual de osm2pgrouting necesita cargar todos los datos en la memoria, lo que lo hace rápido, pero también requiere mucha memoria para grandes conjuntos de datos. Una herramienta alternativa a osm2pgrouting sin la limitación del tamaño de la red es osm2po (https://osm2po.de). Está disponible en «Freeware License».

Los datos sin procesar de OpenStreetMap contienen muchas más características e información de la necesaria para el enrutamiento. Además, el formato no es adecuado para usar automáticamente en pgRouting. Un archivo XML .osm consta de tres tipos de atributos principales:

  • nodos

  • caminos

  • relaciones

Versión y opciones de ayuda

Este taller utiliza la versión osm2pgrouting 2.3

osm2pgrouting -v
osm2pgrouting --help
$ osm2pgrouting --version
This is osm2pgrouting Version 2.3.3



$ osm2pgrouting --help
Allowed options:

Help:
  --help                                Produce help message for this version.
  -v [ --version ]                      Print version string

General:
  -f [ --file ] arg                     REQUIRED: Name of the osm file.
  -c [ --conf ] arg (=/usr/share/osm2pgrouting/mapconfig.xml)
                                        Name of the configuration xml file.
  --schema arg                          Database schema to put tables.
                                          blank: defaults to default schema
                                                dictated by PostgreSQL
                                                search_path.
  --prefix arg                          Prefix added at the beginning of the
                                        table names.
  --suffix arg                          Suffix added at the end of the table
                                        names.
  --addnodes                            Import the osm_nodes, osm_ways &
                                        osm_relations tables.
  --attributes                          Include attributes information.
  --tags                                Include tag information.
  --chunk arg (=20000)                  Exporting chunk size.
  --clean                               Drop previously created tables.
  --no-index                            Do not create indexes (Use when indexes
                                        are already created)

Database options:
  -d [ --dbname ] arg                   Name of your database (Required).
  -U [ --username ] arg                 Name of the user, which have write
                                        access to the database.
  -h [ --host ] arg (=localhost)        Host of your postgresql database.
  -p [ --port ] arg (=5432)             db_port of your database.
  -W [ --password ] arg                 Password for database access.

Un ejemplo de archivo osm tiene este aspecto:

<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
    <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
    <meta osm_base="2016-03-31T22:37:01Z"/>
    ...	
    <node id="2702022" lat="50.7654175" lon="7.1376180" version="11"
        timestamp="2011-10-30T18:29:52Z"
        changeset="9696743" uid="116044" user="berndw"/>
    <node id="2702027" lat="50.7704923" lon="7.1432462" version="5"
        timestamp="2014-12-09T18:47:47Z"
        changeset="27362963" uid="1751908" user="Blues Brothers"/>
    <node id="2703359" lat="50.7548501" lon="7.0964640" version="10"
        timestamp="2013-10-19T22:50:43Z"
        changeset="18442764" uid="45243" user="odna">
        <tag k="TMC:cid_58:tabcd_1:Class" v="Point"/>
        <tag k="TMC:cid_58:tabcd_1:Direction" v="positive"/>
        <tag k="TMC:cid_58:tabcd_1:LCLversion" v="9.00"/>
        <tag k="TMC:cid_58:tabcd_1:LocationCode" v="39278"/>
        <tag k="TMC:cid_58:tabcd_1:NextLocationCode" v="11766"/>
        <tag k="TMC:cid_58:tabcd_1:PrevLocationCode" v="11765"/>
    </node>
    ...	
    <way id="4372665" version="14"
        timestamp="2012-07-03T10:29:34Z"
        changeset="12098548" uid="133419" user="dachefte">
        <tag k="footway:right:smoothness" v="good"/>
        <tag k="footway:right:surface" v="paving_stones"/>
        <tag k="footway:right:width" v="3"/>
        <tag k="highway" v="unclassified"/>
    </way>
    ...	
    <relation id="399785" version="2"
        timestamp="2012-08-08T18:27:05Z"
        changeset="12660262" uid="55687" user="dschuwa">
        <member type="way" ref="32285676" role="street"/>
        <member type="way" ref="17129333" role="street"/>
        <member type="way" ref="49305040" role="street"/>
        <member type="way" ref="49305039" role="street"/>
        <member type="way" ref="32286326" role="street"/>
        <member type="way" ref="32286325" role="street"/>
        <member type="way" ref="32286327" role="street"/>

        ...	
        <tag k="name" v="Brieger Weg"/>
        <tag k="type" v="associatedStreet"/>
    </relation>
    ...	
</osm>

La descripción detallada de todos los tipos y clases de OpenStretMap posibles se describen como características del mapa

mapconfig.xml

Cuando se utiliza osm2pgrouting, solo tomamos nodos y caminos y las clases especificados en un archivo mapconfig.xml que se importará a la base de datos de ruteo:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <type name="highway" id="1">
    <class name="motorway" id="101" />
    <class name="motorway_link" id="102" />
    <class name="motorway_junction" id="103" />
    ...
    <class name="road" id="100" />
  </type>    
  <type name="junction" id="4">
    <class name="roundabout" id="401" />
  </type>  
</configuration> 

Por defecto, mapconfig.xml es instalado en /usr/share/osm2pgrouting/.