おしらせ

pgRoutingインストールメモ

2013年08月19日

pgRoutingをインストールした時のコマンドメモです。
いろんなライブラリのバージョンによりエラーが起きたりするのでこの通りやっても失敗するかも。

CentOS6.3にて

●pgRouting
Installation - Open Source Routing Library
http://www.pgrouting.org/docs/1.x/install.html

yumでいろいろ

# yum install boost
# yum install slang*
# yum install slang-devel
# yum install *gmp*
# yum install *mpfr*

これは結局不要かも

wget ftp://space.mit.edu/pub/davis/slang/v2.2/slang-2.2.4.tar.gz
tar xzf slang-2.2.4.tar.gz
cd slang-2.2.4
./configure
make
# make install
# /sbin/ldconfig -v | grep slang
wget http://downloads.sourceforge.net/project/gaul/gaul-devel/0.1849/gaul-devel-0.1849-0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fgaul%2Ffiles%2Fgaul-devel%2F0.1849%2F&ts=1346985563&use_mirror=jaist
tar xzf gaul-devel-0.1849-0.tar.gz
cd gaul-devel-0.1849-0
./configure --enable-slang=no
make
# make install
# /sbin/ldconfig -v | grep gaul

CGALが苦労した。最新の4.0.2だとダメだった。

wget https://gforge.inria.fr/frs/download.php/31175/CGAL-3.9.tar.gz
tar xzf CGAL-3.9.tar.gz
cd CGAL-3.9
cmake -DBoost_INCLUDE_DIR=/usr/include -DBoost_LIBRARYDIR=/usr/lib64 -DBoost_LIBRARIES=/usr/lib64/libboost_thread-mt.so -DGMP_LIBRARIES=/usr/lib64/libgmp.so -DMPFR_LIBRARIES=/usr/lib64/libmpfr.so  .
make
# make install
# /sbin/ldconfig -v | grep CGAL

ようやくpgRoutingへ

wget http://download.osgeo.org/pgrouting/source/pgrouting-1.05.tar.gz
tar xzf pgrouting-1.05.tgz
cd pgrouting-1.05
cd /usr/local/src/pgrouting-1.05

PostgreSQLを見つけてくれない場合はこの2箇所を追記
(PostgreSQLのインストールパスによる:/usr/local/pgsql-9.1.3)
emacs -nw cmake/FindPostgreSQL.cmake
FIND_PATH(POSTGRESQL_INCLUDE_DIR postgres.h
の下に→ /usr/local/pgsql-9.1.3/include/server
find_library(POSTGRESQL_LIBRARIES NAMES pq libpq
の下に→ /usr/local/pgsql-9.1.3/lib

cmake -DWITH_TSP=ON -DWITH_DD=ON .
make
# make install
# /sbin/ldconfig -v | grep routing

インストール完了!

次に、使えるようにする。
まずPostGIS

createdb -U postgres -T template0 -E UTF-8 routing
psql -d routing -c 'CREATE EXTENSION postgis'
psql -d routing -c "CREATE EXTENSION postgis_topology;"
psql -d routing -f /usr/local/pgsql-9.1.3/share/contrib/postgis-2.0/legacy.sql

次の部分は投影変換のパラメータがProj.4と微妙に違ったのでPostGIS側を変更しているところ。

psql -d routing -c "update spatial_ref_sys set proj4text=replace(proj4text,'-148,507,685,0,0,0,0','-146.414,507.337,680.507,0,0,0,0') where srtext like '%-148,507%';"
psql -d routing -c "update spatial_ref_sys set srtext=replace(srtext,'-148,507,685,0,0,0,0','-146.414,507.337,680.507,0,0,0,0') where srtext like '%-148,507%';"
確認
psql -d routing -c "select st_astext(st_transform(st_geomfromewkt('SRID=4301;POINT(139.7701767 35.6776208)'),4612));"
echo "139.7701767 35.6776208 0.0" | cs2cs -v +init=epsg:4301  +to +init=epsg:4612 -f "%.10f"

pgRouting本体

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_tsp.sql routing
psql -U postgres -f /usr/share/postlbs/routing_tsp_wrappers.sql routing

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

完了

動作確認はここを使った。
PgRouting 1.02 on Win32
http://www.davidgis.fr/documentation/pgrouting-1.02/
なお

UPDATE roads SET reverse_cost=1000 WHERE oneway='Y';

をしないと最初のSQLでpostgres本体が落ちます・・・

最後のtsp_astar_directedのところでもエラー。
・tsp_testがない
create table tsp_test as select * from rouds;
・astar_sp_delta_directedの中 1
startpoint(the_geom)を startpoint((st_dump(the_geom)).geom)に
・astar_sp_delta_directedの中 2
小数型に整数が代入される辺り・・・明示的にキャストする

	FOR rec IN EXECUTE 'SELECT (CASE WHEN '||source_x||'<'||target_x||
           ' THEN '||source_x||' ELSE '||target_x||
           ' END)::float8 as ll_x, (CASE WHEN '||source_x||'>'||target_x||
           ' THEN '||source_x||' ELSE '||target_x||' END)::float8 as ur_x'
        LOOP