Tiro monedas al aire, pero hasta ahora nunca las pude agarrar.

OBS:

  •  Tener instalado lo siguiente:
    •  Postgresql 8.4
    •  PostGIS 1.5
  •  En caso de no tener instalado Postgres o PostGIS, podes ver esta entrada.
  •  Ser root

Entramos a la consola y escribimos:

apt-get install build-essential subversion cmake git
apt-get install libboost-graph-dev postgresql-server-dev-8.4
apt-get install libcgal-dev

Algoritmo Driving Distance. Escribimos en la consola:

apt-get install libcgal

Algoritmo TSP. Escribimos en la consola:

wget -c http://sourceforge.net/projects/gaul/files/gaul-devel/0.1850-0/gaul-devel-0.1850-0.tar.gz
tar -xzf gaul-devel-0.1850-0.tar.gz
cd gaul-devel-0.1850-0/
./configure --disable-slang
make
make install
ldconfig

Compilar pgRouting con los algoritmos TSP y DD. Escribimos en la consola:

cd ..
wget -c http://download.osgeo.org/pgrouting/source/pgrouting-1.05.tar.gz
tar -xzf pgrouting-1.05.tar.gz
cd pgrouting-1.05
cmake -DWITH_TSP=ON -DWITH_DD=ON .

Editamos estos dos archivos:

nano core/src/shooting_star_relax.hpp
nano core/src/edge_visitors.hpp

Y cambiamos a cada uno de los archivos mencionados arriba:

#include <boost/property_map.hpp>

Por:

#include <boost/property_map/property_map.hpp>

Editamos lo siguiente:

nano core/src/shooting_star_boost_wrapper.cpp

Y cambiamos a cada uno el:

#include <boost/vector_property_map.hpp>

Por:

#include <boost/property_map/vector_property_map.hpp>

Volvemos a escribir en la consola:

make
make install

Creamos una base de datos. Escribimos en la consola:

su postgres
createdb -U postgres routing
createlang -U postgres plpgsql routing

Agregamos las funciones de PostGIS a nuestra base de datos (routing). Escribimos en la consola:

psql -d routing -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d routing -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql

Agregamos las funciones de pgRouting a nuestra base de datos (routing). Escribimos en la consola:

psql -U postgres -f /usr/share/postlbs/routing_core.sql routing
psql -U postgres -f /usr/share/postlbs/routing_core_wrappers.sql routing
psql -U postgres -f /usr/share/postlbs/routing_topology.sql routing

Agregamos las funciones de TSP a nuestra base de datos (routing). Escribimos en la consola:

psql -U postgres -f /usr/share/postlbs/routing_tsp.sql routing
psql -U postgres -f /usr/share/postlbs/routing_tsp_wrappers.sql routing

Agregamos las funciones de DD (Driving Distance) a nuestra base de datos (routing). Escribimos en la consola:

psql -U postgres -f /usr/share/postlbs/routing_dd.sql routing
psql -U postgres -f /usr/share/postlbs/routing_dd_wrappers.sql routing

Salimos del usuario postgres. Escribimos en la consola:

exit

Descargamos datos de Asunción – Paraguay de OSM. Escribimos en la consola:

cd /home/proyectosbeta/
wget -c http://proyectosbeta.net/Arhivos%20del%20Blog/GIS/OSM/Asuncion%20-%20Paraguay.osm

Instalamos osm2pgrouting. Escribimos en la consola:

git clone git://github.com/kashif/osm2pgrouting.git
cd osm2pgrouting
cmake .
make

Convertir OSM a pgRouting. Escribimos en la consola:

su postgres
bin/./osm2pgrouting -file ../Asuncion\ -\ Paraguay.osm -conf ./mapconfig.xml -dbname routing -user postgres -host localhost -port 5432 -passwd 123456

Sale esto por pantalla:

#########################
size of streets: 6247
size of splitted ways : 25057
finished

Escribimos en la consola:

psql -U postgres routing
\d

Sale esto por pantalla:

Listado de relaciones
Esquema |       Nombre        |   Tipo    |  Dueño
---------+---------------------+-----------+----------
public  | classes             | tabla     | postgres
public  | geography_columns   | vista     | postgres
public  | geometry_columns    | tabla     | postgres
public  | nodes               | tabla     | postgres
public  | relation_ways       | tabla     | postgres
public  | relations           | tabla     | postgres
public  | spatial_ref_sys     | tabla     | postgres
public  | types               | tabla     | postgres
public  | vertices_tmp        | tabla     | postgres
public  | vertices_tmp_id_seq | secuencia | postgres
public  | way_tag             | tabla     | postgres
public  | ways                | tabla     | postgres
(12 filas)

OBS:

  • La tabla que contiene la geometría es ways;

Pruebas sql en PGAdmin:
Seleccionamos la base datos routing.

select * from shortest_path('select gid as id, source, target, length as cost from ways', 2848, 10545, false, false);
select * from dijkstra_sp('ways', 2848, 10545);

Mostramos un ejemplo usando el algoritmo de Dijkstra.
OBS:

  •  Tener instalado QGIS. Ver entrada.
  •  Entramos a la consola y escribimos: aptitude install python-psycopg2

Abrimos QGIS:

    • Archivo -> Propiedades del proyecto -> Sistema de referencia de coordenadas (SRC)
    •  Marcamos «Activar transformaciones de SRC al vuelo«
    •  Aceptamos.
    •  Configuramos la conexión a nuestra base de datos.

Conexión a una base de datos PostGres- PostGIS usando QGIS

    •  Nos dirigimos a Complementos -> Obtener complementos de Python.
    •  Buscamos RT Sql Layer y lo instalamos.
    •  Ahora entramos al icono (se marco de color verde) que se muestra en la imagen de abajo.

Usamos el plugin RT Sql Layer

    •  Nos vamos al menu Database y seleccionamos routing.
    •  Luego entramos al icono Query builder.
    •  Escribimos la consulta. En la imagen de abajo muestra lo que tenemos que agregar.

Creando una consulta en QGIS

Ahora se muestra el resultado del camino mínimo de dos puntos usando el algortimo de Dijkstra.

Mostrando resultado de la consulta

Fuente 1: pgRouting Project
Fuente 2: pgRouting
Fuente 3: Pastebin
Fuente 4: GIS and Chips
Fuente 5: Scribd


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *