Az
előző bejegyzésben bemutattam, hogyan is lehet az alapokból felhúzni egy PostGIS bővítménnyel ellátott PostgreSQL szervert Linuxon.
Most szeretném megmutatni, hogyan is tudjuk felvértezni ezt az adatbázist útvonalkereső és utazóügynök probéma megoldó képességekkel:
Elsőként telepítsük a pgrouting fordításhoz szükséges eszközöket:
apt-get install sudo apt-get install build-essential cmake postgresql-server-dev-9.1
sudo apt-get install libboost-graph-dev
sudo apt-get install libcgal*
wget http://sourceforge.net/projects/gaul/files/gaul-devel/0.1850-0/gaul-devel-0.1850-0.tar.gz/download
tar -zxvf gaul-devel-0.1850-0.tar.gz
cd gaul-devel-0.1850-0
./configure --disable-slang
make
Ha az előzőek sikeresen megvoltak, foglalkozhatunk ténylegesen a pgrouting fordításával.
wget http://download.osgeo.org/pgrouting/source/pgrouting-1.05.tar.gz
tar -zxvf pgRouting-1.05.tgz
cd pgrouting/
cmake -DWITH_TSP=on
Ezen a ponton a fordító hibába ütközik, nem talál bizonyos header fájlokat, így ezeket kézzel kell megadnunk neki. A bejegyzés írásakor összesen 3 módosításra volt szükség:
Érintett fájl: .core/src/shooting_star_boost_wrapper.cpp
Cseréljük ezt a sort:
Erre:
Érintett fájl: .core/src/edge_visitors.cpp
Cseréljük ezt a sort:
Erre:
És ezt a sort:
Erre:
Ezt követően fordítsuk újra, majd telepítsük is:
cmake -DWITH_TSP=on
make
sudo make install
Ha minden jól megy, már csak létre kell hoznunk egy, az útvonaltervezési adatbázisok alapjául szolgáló template adatbázist:
createdb -U dbsuperuser -h 127.0.0.1 -W -E UNICODE -T template_postgis template_routing
cd /usr/share/postlbs
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_core.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_core_wrappers.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_topology.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_tsp.sql
psql -U dbuser -h 127.0.0.1 -W template_routing < routing_tsp_wrappers.sql
Feltöltés adatokkal
Ahhoz, hogy mintaadatokkal tölthessük fel adatbázisunkat, két dologra lesz szükségünk: egyrészt mintaadatokra, másrészt az ezeket adatbázisba töltő programra.
Mintaadatoknak az Openstreetmap adatbázisát javaslom, az alábbiakban is ennek használatát mutatom be:
osm2pgrouting letöltése és kitömörítése:
wget https://github.com/pgRouting/osm2pgrouting/zipball/master -O osm2pgrouting.zip
unzip osm2pgrouting.zip
Lépjünk az újonnan létrehozott könyvtárba, telepítsük a szükséges library-t majd fordítsuk le az alkalmazást:
sudo apt-get install libexpat1-dev
make
A mintaadatokat az Openstreetmap-ről tölthetjük le:
wget http://download.geofabrik.de/openstreetmap/europe/hungary.osm.bz2 -O hungary.osm.bz2
sudo apt-get install bzip2
bunzip2 hungary.osm.bz2
Mindezek után már csak annyi a dolgunk, hogy létrehozzunk egy új adatbázist és a lefordított programmal feltöltsük azt adatokkal (a letöltött adatok és gépünk teljesítményétől függően ez elég hosszú folyamat lehet):
createdb -U user -h 127.0.0.1 -W -E UNICODE -T template_routing hun_routing
./osm2pgrouting -file hungary.osm -conf mapconfig.xml -dbname hun_routing -user pguser -passwd ~jelszó~ -clean
(megjegyzés: Ha egy már meglévő adatbázison futtatjuk ezt a parancsot, készüljünk rá, hogy a -clean kapcsoló miatt annak tartalmát eldobja/felülírja).
Ha ez lefutott, akkor kész vagyunk és rendelkezünk egy útvonaltervezésre alkalmas adatbázissal.
A későbbiekben bemutatom, hogyan is lehet ezeket az új funkciókat a gyakorlatban is használni egy példaalkalmazáson keresztül.
Aki türelmetlen, annak pedig egy kis útmutató az SQL lekérdezésekhez:
LINK
FONTOS: Jelenleg az adatok importálásánál a pgrouting nem veszi figyelembe az egyes utakra vonatkozó korlátozásokat, amely főleg az egyirányú utaknál lehet fontos. A későbbiekben részletesebben foglalkozok a problémával.