A la hora de compilar pgRouting 1.02 con la distribución de openSUSE 11 me he encontrado algún cambio según la documentación de instalación de la página oficial de pgRouting, así que en este post os describo con detalle el proceso de compilación según esta distribución de linux esperando que sea de utilidad y así también me vale a mi para acordarme.

Instrucciones de compilación de pgRouting 1.02 en OpenSUSE 11 con PostGIS 1.3.3.
Antes de empezar aquí van los enlaces que he utilizado para este post.
- Página oficial de pgRouting: http://pgrouting.postlbs.org/
- Tutorial: http://pgrouting.postlbs.org/wiki/WorkshopFOSS4G2007
- Ejemplo de pgrouting: http://cartosig.upv.es/es/recursos-sig/pgrouting-shooting-star-usage-exa...
Según la página web de pgrouting estos son los requerimientos para compilar e instalar pgrouting:
To install/compile pgRouting the following applications/libraries are required:
- pgRouting source code
- C and C++ compilers
- PostgreSQL version >= 8.0
- PostGIS version >= 1.0
- The Boost Graph Library (BGL). Version >= 1.33 which contains the astar.hpp
- The Genetic Algorithm Utility Library (GAUL) * Computational Geometry Algorithms Library (CGAL) version >= 3.2
Paquetes necesarios para openSUSE
PostgreSQL se puede instalar directamente desde los repositorios estándar de OpenSUSE. Además de la base de datos y los clientes (paquetes postgresql-server y postgresql) habrá que instalar los fuentes que contienen los ficheros cabecera que pgrouting necesita para compilar (paquete postgreql-devel) también desde desde los repositorios estándar de OpenSUSE.
- Package postgresql-server,postgresql (paquetes estandar de OpenSUSE)
- Package postgresql-devel (paquetes estandar de OpenSUSE)
PostGIS se puede instalar directamente desde el siguiente GEO repositorio (http://download.opensuse.org/repositories/Application:/Geo/), no siendo necesario su compilación manual para la posterior compilación de pgrouting.
- Package postgis (instalado desde el GEO repositorio)
Antes de compilar e instalar las librerias que se comentan arriba (BGL, gaul y CGAL) tenemos que comprobar si están los siguientes paquetes instalados (todos ellos están disponibles en la distribución estándar de OpenSUSE)
- Packages gcc, gcc-c++, make, cmake (C and C++ compilers y utilidades make y cmake)
- Package pyhton-devel (el package python ya debiera estar instalado)
- Package zlib, zlib-devel (si se quiere compatibilidad zlib para boost library)
- Package bzip2, libbzip2-devel (si se quiere compatibilidad bzip2 para boost library)
- Situar los fuentes en algun directorio para su compilación, por ejemplo: Crear directorio curso/software/pgrouting en nuestro home (an adelante dir1)
-
Bajarse los fuentes de Boost, GAUL, CGAL y pgRouting y dejarlos en el dir1
Boost (version actual Boost 1_36_0): http://www.boost.org/libs/graph/doc/index.html
GAUL (version actual GAUL 0.1850-0): http://gaul.sourceforge.net/
CGAL (version actual CGAL 3.3.1): http://www.cgal.org/
pgRoutinhg (version actual pgRouting 1.02): http://pgrouting.postlbs.org/ -
Descomprimir fuentes. Dentro de dir1 ejecutar:
> tar -xvzf boost_1_36_0.tar.gz
> tar -xvzf gaul-devel-0.1850-0.tar.gz
> tar -xvzf CGAL-3.3.1.tar.gz
> tar -xvzf pgRouting-1.02.tgz -
Tendremos asi:
alumno@linux-n7r3:~/curso/software/pgrouting> ll
total 41724
drwxr-xr-x 10 alumno users 4096 2008-08-12 15:49 boost_1_36_0
-rw-r--r-- 1 alumno users 32731470 2008-08-13 05:23 boost_1_36_0.tar.gz
drwxr-xr-x 11 alumno users 4096 2007-08-25 21:03 CGAL-3.3.1
-rw-r--r-- 1 alumno users 8593200 2008-08-13 05:23 CGAL-3.3.1.tar.gz
drwxr-xr-x 9 alumno users 4096 2006-10-06 00:37 gaul-devel-0.1850-0
-rw-r--r-- 1 alumno users 1258437 2008-08-13 05:23 gaul-devel-0.1850-0.tar.gz
drwxr-xr-x 7 alumno users 4096 2008-04-10 05:03 pgrouting
-rw-r--r-- 1 alumno users 55961 2008-08-13 05:23 pgRouting-1.02.tgz - Compilar e instalar la libreria Boost
Dentro del directorio dir1/boost_1_36_0 ejecutar como usuario normal:
> ./configure
> makeComo superusuario ejecutar:
> make installEsto instalará los includes y las librerias de Boost en los directorios
/usr/local/include/boost-1_36
/usr/local/lib - Compilar e instalar la libreria gaul
Dentro del directorio dir1/gaul-devel-0.1850-0 ejecutar como usuario normal:
> ./configure --disable-slang
> makeComo superusuario ejecutar:
> make installEsto instalará los includes y las librerias de gaul en los directorio
/usr/local/include/gaul
/usr/local/lib - Compilar e instalar la libreria CGAL
Dentro del directorio dir1/CGAL-3.3.1 ejecutar como superusuario:> ./install_cgal --prefix=/usr/local --with-boost=n --BOOST_INCL_DIR /usr/local/include/boost-1_36 --BOOST_LIB_DIR /usr/local/lib --without-autofind -ni /usr/bin/g++
Esto instalará los includes y las librerias de CGAL en los directorios;
/usr/local/bin
/usr/local/include
/usr/local/lib
/usr/local/share - Compilar e instalar la libreria pgRouting
*Con boost 1.36 pgrouting 1.02 produce un error al realizar cmake porque busca la versión 1.35 de boost. Para solucionarlo ejecutar la siguiente orden dentro del directorio /usr/local/include como superusuario que creará un enlace simbolico:
> ln -s boost-1_36 boost-1_35Dentro del directorio dir1/pgrouting ejecutar como usuario normal:
> cmake -DWITH_TSP=ON -DWITH_DD=ON .
> makeComo superusuario ejecutar:
> make installEsto instalará los siguientes ficheros
-- Installing: /usr/lib/postgresql/librouting.so
-- Installing: /usr/share/postlbs/routing_core.sql
-- Installing: /usr/share/postlbs/routing_core_wrappers.sql
-- Installing: /usr/lib/postgresql/librouting_tsp.so
-- Installing: /usr/share/postlbs/routing_tsp.sql
-- Installing: /usr/share/postlbs/routing_tsp_wrappers.sql
-- Installing: /usr/lib/postgresql/librouting_dd.so
-- Installing: /usr/share/postlbs/routing_dd.sql
-- Installing: /usr/share/postlbs/routing_dd_wrappers.sql*nota: si se quiere compilar solo la funcionalidad core de pgrouting ejecutar cmake .
Probando pgrouting
Para ello vamos a utilizar los datos y los ejemplos propuestos en el tutorial de David Teacher
- Creamos la base de datos testpgrouting de prueba
> createdb -U postgres testpgrouting
> createlang plpgsql -U postgres testpgrouting - Cargamos la extensión espacial PostGIS (el paquete del repositorio instala los ficheros sql necesarios en /usr/share/postgis)
> psql -U postgres -f /usr/share/postgis/lwpostgis.sql -d testpgrouting
> psql -U postgres -f /usr/share/postgis/spatial_ref_sys.sql -d testpgrouting - Cargamos la extensión pgrouting
-- Funcionalidad principal (core)
> psql -U postgres -f /usr/share/postlbs/routing_core.sql -d testpgrouting
> psql -U postgres -f /usr/share/postlbs/routing_core_wrappers.sql -d testpgrouting-- Si queremos cargar también la funcionalidad extra de pgrouting (aunque para este ejemplo no es necesaria) tendríamos que ejecutar también las siguientes sentencias:
-- Con TSP
> psql -U postgres -f /usr/share/postlbs/routing_tsp.sql -d testpgrouting
> psql -U postgres -f /usr/share/postlbs/routing_tsp_wrappers.sql -d testpgrouting-- Con Driving Distance
> psql -U postgres -f /usr/share/postlbs/routing_dd.sql -d testpgrouting
> psql -U postgres -f /usr/share/postlbs/routing_dd_wrappers.sql -d testpgrouting - Cargamos los datos del ejemplo
http://cartosig.upv.es/es/system/files/jomarlla/pgrouting_wr.sql> psql -U postgres -f ruta_al_fichero_pgrouting_wr.sql -d testpgrouting
- Abrimos una sesion del cliente psql (> psql -U postgres -d testpgrouting) y ejecutamoslas siguientes sentencias SQL.
-- Vemos la tabla con la cual vamos a trabajar
testpgrouting=# SELECT gid as id, source, target, cost, reverse_cost,x1, y1,x2, y2, rule, to_cost FROM wr order by id;-- Calculamos el camino óptimo
testpgrouting=# SELECT * FROM shortest_path_shooting_star('SELECT gid as id, source, target, cost, reverse_cost,x1, y1,x2, y2, rule, to_cost FROM wr order by id',20,8,true,true);
vertex_id | edge_id | cost
-----------+---------+------------------
31 | 20 | 48.3246366252935
29 | 19 | 38.0539027874633
27 | 17 | 39.2224758594282
23 | 15 | 39.4286821133412
25 | 16 | 29.9822270236865
17 | 13 | 38.6094358307609
21 | 12 | 25.9044654619518
19 | 11 | 60
15 | 9 | 40
12 | 7 | 53.8753258085636
1 | 1 | 14.2572101668807
2 | 2 | 11.0893168443772
4 | 3 | 13.9884637834871
6 | 8 | 62.5380849791951
Para ampliar este ejemplo y ver otros ejemplos referirse a:http://cartosig.upv.es/es/recursos-sig/pgrouting-shooting-star-usage-exa...
http://cartosig.upv.es/es/recursos-sig/web-based-routing-introduction-pg...

