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*
Szükségünk lesz továbbá a GAUL (Genetic Algorithm Utility Library) könyvtárra is:
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:
#include
Erre:
#include
Érintett fájl: .core/src/edge_visitors.cpp
Cseréljük ezt a sort:
#include
Erre:
#include
És ezt a sort:
#include
Erre:
#include
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.
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.