1. Preparar Datos

../_images/prepareData.png

Para poder usar pgRouting, los datos deben importarse a una base de datos.

1.1. Preparar la base de datos

pgRouting se instala como extensión. Esto requiere:

  • PostgreSQL

  • PostGIS

Estos requisitos se cumplen en OSGeoLive. Cuando se instale el software necesario, abrir una ventana de terminal presionando ctrl-alt-t y siguir las instrucciones.

Puede encontrar información sobre la instalación de OSGeoLive en OSGeoLive Installation.

Nota

Si OSGeoLive no se está utilizando, consulte el apéndice del capítulo para configurar el usuario user.

1.1.1. Crear una base de datos compatible con pgRouting

Nota

Dependiendo de la configuración de postgres -U <user> es necesario en los comandos

# Create the database
createdb city_routing

# login as user "user"
psql city_routing << EOF

-- add PostGIS functions
CREATE EXTENSION postgis;

-- add pgRouting functions
CREATE EXTENSION pgrouting;

-- Inspect the pgRouting installation
\dx+ pgrouting

-- View pgRouting version
SELECT pgr_version();

EOF

Nota

Para salir de la base de datos utilizar \q

1.2. Obtenga los Datos del Taller

El taller pgRouting hará uso de los datos de OpenStreetMap, que ya están disponibles en OSGeoLive. Este taller utilizará los datos de la ciudad de Belém y es una instantánea de Sep 2024.

1.2.1. Obtención de los datos

1.2.1.1. Opción 1) Cuando esté usando OSGeoLive

OSGeoLive viene con datos de OSM de la ciudad de Belém.

CITY="BELEM_BR"
bzcat ~/data/osm/$CITY.osm.bz2 > $CITY.osm

1.2.1.2. Opción 2) Descargar datos de sitio web de OSGeoLive

Los mismos datos exactos se pueden encontrar en la página de descarga de OSGeoLive.

CITY="BELEM_BR"
wget -N --progress=dot:mega "https://download.osgeo.org/livedvd/17/osm/BELEM_BR.osm.bz2"
bunzip2 -f "BELEM_BR.osm.bz2"

1.2.1.3. Opción 3) Descargar usando Overpass XAPI

A continuación se descargan los datos de OSM más recientes sobre el uso de la misma área. El uso de estos datos en el taller puede generar variaciones en los resultados, debido a los cambios desde Septiembre de 2024.

CITY="BELEM_BR"
BBOX="-48.52,-1.49,-48.4,-1.36"
wget --progress=dot:mega -O "$CITY.osm" "http://www.overpass-api.de/api/xapi?*[bbox=\$\{BBOX\}][@meta]"

Puede encontrar más información sobre cómo descargar datos de OpenStreetMap en https://wiki.openstreetmap.org/wiki/Downloading_data

Una alternativa para zonas muy grandes es utilizar los servicios de descarga de Geofabrik.

1.3. Cargar datos en la base de datos

El siguiente paso es ejecutar el convertidor ``osm2pgrouting””, que es una herramienta de línea de comandos que inserta los datos en la base de datos, «listo» para ser utilizado con pgRouting. Puede encontrar información adicional sobre ``osm2pgrouting Apéndice: Herramienta de Importación osm2pgrouting

Para este paso:

  • se utiliza el archivo de configuración predeterminado de osm2pgrouting mapconfig.xml

  • y los datos de ~/Desktop/workshop/BELEM_BR.osm

  • con la base de datos city_routing

Desde una ventana de terminal ctrl-alt-t.

1.3.1. Ejecute el convertidor osm2pgrouting

/usr/bin/osm2pgrouting \
    -f "BELEM_BR.osm" \
    -c "/usr/share/osm2pgrouting/mapconfig.xml" \
    -d city_routing \
    -U user \
    -W user \
    --clean

Nota

Dependiendo de la versión osm2pgrouting -W password es necesario

Salida:

Execution starts at: Fri Jan 24 23:44:34 2025

***************************************************
           COMMAND LINE CONFIGURATION             *
***************************************************
Filename = BELEM_BR.osm
Configuration file = /usr/share/osm2pgrouting/mapconfig.xml
host = localhost
port = 5432
dbname = city_routing
username = user
schema= 
prefix = 
suffix = 
Drop tables
Don't create indexes
Don't add OSM nodes
***************************************************
Testing database connection: city_routing
database connection successful: city_routing
Connecting to the database
connection success

Dropping tables...
TABLE: ways dropped ... OK.
TABLE: ways_vertices_pgr dropped ... OK.
TABLE: pointsofinterest dropped ... OK.
TABLE: configuration dropped ... OK.
TABLE: osm_nodes dropped ... OK.
TABLE: osm_ways dropped ... OK.
TABLE: osm_relations dropped ... OK.

Creating tables...
TABLE: ways_vertices_pgr created ... OK.
TABLE: ways created ... OK.
TABLE: pointsofinterest created ... OK.
TABLE: configuration created ... OK.
Opening configuration file: /usr/share/osm2pgrouting/mapconfig.xml
    Parsing configuration

Exporting configuration ...
  - Done 
Counting lines ...
  - Done 
Opening data file: BELEM_BR.osm	total lines: 1706680
    Parsing data


End Of file


    Finish Parsing data

Adding auxiliary tables to database...

Export Ways ...
    Processing 119686 ways:

[********|                                          ] (16%) Total processed: 20000	 Vertices inserted: 21229	Split ways inserted 27927

[****************|                                  ] (33%) Total processed: 40000	 Vertices inserted: 1968	Split ways inserted 3014

[*************************|                         ] (50%) Total processed: 60000	 Vertices inserted: 390	Split ways inserted 665

[*********************************|                 ] (66%) Total processed: 80000	 Vertices inserted: 145	Split ways inserted 230

[*****************************************|         ] (83%) Total processed: 100000	 Vertices inserted: 437	Split ways inserted 605

[**************************************************|] (100%) Total processed: 119686	 Vertices inserted: 61	Split ways inserted 146

Creating indexes ...

Processing Points of Interest ...
#########################
size of streets: 119686
Execution started at: Fri Jan 24 23:44:34 2025
Execution ended at:   Fri Jan 24 23:44:44 2025
Elapsed time: 9.621 Seconds.
User CPU time: -> 4.26841 seconds
#########################
psql -c 'DELETE FROM ways WHERE length_m IS NULL;' -d city_routing
DELETE 1

1.3.2. Tablas en la base de datos

psql -d city_routing -c "\d"

Si todo salió bien el resultado debería verse así:

                   List of relations
 Schema |           Name           |   Type   | Owner  
--------+--------------------------+----------+--------
 public | configuration            | table    | user
 public | configuration_id_seq     | sequence | user
 public | geography_columns        | view     | runner
 public | geometry_columns         | view     | runner
 public | pointsofinterest         | table    | user
 public | pointsofinterest_pid_seq | sequence | user
 public | spatial_ref_sys          | table    | runner
 public | ways                     | table    | user
 public | ways_gid_seq             | sequence | user
 public | ways_vertices_pgr        | table    | user
 public | ways_vertices_pgr_id_seq | sequence | user
(11 rows)

1.4. Capítulo: Apéndice

El nombre de cuenta de OSGeoLive en la base de datos es user. Para utilizar fácilmente el taller cuando no se utiliza OSGeoLive se necesitan estos pasos adicionales:

# work on the home folder
cd

# login to postgres
psql -U postgres

-- Create "user"
CREATE ROLE "user" SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN PASSWORD 'user';

-- exit psql
\q

# Add the user to .pgpass
echo :5432:*:user:user >> .pgpass