pgRoutingでセールスマン巡回問題を解決したかった
PC-MAPPINGの機能でもできるわけですが、PC-MAPPINGは会社でないと使えないのでFOSS4Gツールを使って順路検索をしようとしました。
今回はUbuntu Server 14.04.1上にPostgreSQL、PostGIS、pgRoutingを入れてOSMデータを解析する形です。
osm2pgroutingの実行でエラーが発生し、解決できないところまでのメモです。
まずPostgreSQLとPostGISをインストールします。
# apt-get install postgresql postgis proj-bin gdal-bin
pgRoutingのインストールはWorkshopのサイトを見て行いました。
pgRouting ワークショップマニュアル — Workshop - FOSS4G routing with pgRouting
aptのリポジトリにpgRoutingのものを追加してインストールを行います。
# add-apt-repository ppa:georepublic/pgrouting-unstable # cat /etc/apt/sources.list.d/georepublic-pgrouting-unstable-trusty.list deb http://ppa.launchpad.net/georepublic/pgrouting-unstable/ubuntu trusty main # apt-get update # apt-get install postgresql-9.3-pgrouting
OpenStreetMapのデータをpgRoutingで使うためのパッケージをインストールします。
# apt-get install osm2pgrouting
データベースにpgRoutingの機能を追加します。
# su - postgres $ createdb -U postgres ingress $ psql -U postgres -d ingress -c "CREATE EXTENSION postgis;" $ psql -U postgres -d ingress -c "CREATE EXTENSION pgrouting;"
続いてOpenStreetMapのデータをダウンロードします。
適当なブラウザにてhttp://osm.org/にアクセスし、現実的に歩けそうな範囲を表示した後に、1.左上の「エクスポート」をクリック。2.青い「エクスポート」のボタンをクリックします。
map.osmというファイルがダウンロードされるので、適当な方法でサーバーに送り込んであげてください。
送り込んだmap.osmをingressデータベースに放り込みます。
$ osm2pgrouting -file "data/map.osm" \ -conf "/usr/share/osm2pgrouting/mapconfig.xml" \ -dbname ingress \ -user postgres \ -clean host=127.0.0.1 user=postgres dbname=ingress port=5432 connection failed
ぐぬぬ…。
# cat /var/log/postgresql/postgresql-9.3-main.log ~中略 LOG: could not receive data from client: 接続が相手からリセットされました
さて、これを調べないと…。
2014/09/01追記
/etc/postgresql/9.3/main/pg_hba.confのMETHODを全てtrustに変更したところconnection failedは出なくなりました。
# vi /etc/postgresql/9.3/main/pg_hba.conf local all postgres trust local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust