pgRoutingでセールスマン巡回問題を解決したかった

PC-MAPPINGの機能でもできるわけですが、PC-MAPPINGは会社でないと使えないのでFOSS4Gツールを使って順路検索をしようとしました。

今回はUbuntu Server 14.04.1上にPostgreSQLPostGIS、pgRoutingを入れてOSMデータを解析する形です。

osm2pgroutingの実行でエラーが発生し、解決できないところまでのメモです。

まずPostgreSQLPostGISをインストールします。

# 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.青い「エクスポート」のボタンをクリックします。
f:id:k-side:20140828140515p:plain

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