2011年4月25日月曜日

16 pgRouting in Debian6 4 - japan.osm の登録

pgRouting Workshop Manual
http://workshop.pgrouting.org/

を参考に OpenStreetMap でテストします。


0 japan.osm.highway データ
pgRouting には、osm データが必要です。

CloudMade Downloads Japan サイト
http://downloads.cloudmade.com/asia/japan#downloads_breadcrumbs

japan.osm.highway.bz2 をダウンロードして解凍します。

user@deb6-vmw:~/ダウンロード$ bunzip2 japan.osm.highway.bz2

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="Osmosis 0.36">
<node id="26155122" version="2" timestamp="2008-02-27T22:48:02Z" uid="19799" user="daveemtb" changeset="219539" lat="26.1716092" lon="127.9096729">
<tag k="created_by" v="JOSM"/>
</node>
<node id="26155133" version="2" timestamp="2008-02-27T22:48:02Z" uid="19799" user="daveemtb" changeset="219539" lat="26.1679759" lon="127.9060651">
---
<way id="32742015" version="1" timestamp="2009-04-02T04:56:03Z" uid="24685" user="tosihisa" changeset="54083">
<nd ref="368385006"/>
<nd ref="368385008"/>
<tag k="created_by" v="Merkaartor 0.12"/>
<tag k="highway" v="trunk"/>
<tag k="name" v="国道1号線(Route 1)"/>
<tag k="oneway" v="yes"/>
<tag k="ref" v="1"/>
<tag k="tunnel" v="yes"/>
</way>
---
<relation id="1437868" version="1" timestamp="2011-02-20T16:06:16Z" uid="129607" user="Mage Whopper" changeset="7344209">
<member type="way" ref="100653311" role="inner"/>
<member type="way" ref="100653309" role="outer"/>
<tag k="type" v="multipolygon"/>
</relation>
</osm>

1 japan.osm.highway を osm2pgrouting でデータベースに追加します。

1-1 GitHub pgRouting / osm2pgrouting サイト
https://github.com/pgRouting/osm2pgrouting

から osm2pgrouting をダウンロードします。

osm2pgrouting を解凍します。

user@deb6-vmw:~/ダウンロード$ tar xvzf pgRouting-osm2pgrouting-e1757cb.tar.gz

1-2 pgRouting-osm2pgrouting-e1757cb ディレクトリに移動します。

user@deb6-vmw:~/ダウンロード$ cd pgRouting-osm2pgrouting-e1757cb/
user@deb6-vmw:~/ダウンロード/pgRouting-osm2pgrouting-e1757cb$ ls
AUTHORS.txt COPYING Makefile README mapconfig.xml src
user@deb6-vmw:~/ダウンロード/pgRouting-osm2pgrouting-e1757cb$ vim README

README をみると次のものをインストールしておきます。

1. postgresl
2. postgis
3. pgrouting
4. boost
5. expat

expat を Synaptic パッケージマネージャでインストールします。

make コマンドを実行します。

user@deb6-vmw:~/ダウンロード/pgRouting-osm2pgrouting-e1757cb$ make
g++ -c src/Export2DB.cpp src/math_functions.cpp src/Node.cpp src/Tag.cpp src/OSMDocumentParserCallback.cpp src/Way.cpp src/OSMDocument.cpp src/Type.cpp src/Class.cpp src/Configuration.cpp src/ConfigurationParserCallback.cpp src/Relation.cpp -I./ -Isrc -I/usr/include/pgsql -I/usr/include/postgresql -ggdb3
g++ -c src/XMLParser.cpp -I./ -Isrc -I/usr/include/pgsql -I/usr/include/postgresql -ggdb3
g++ -o osm2pgrouting src/osm2pgrouting.cpp *.o -I./ -Isrc -I/usr/include/pgsql -I/usr/include/postgresql -lexpat -ggdb3 -lpq
rm *.o
user@deb6-vmw:~/ダウンロード/pgRouting-osm2pgrouting-e1757cb$ ls
AUTHORS.txt COPYING Makefile README mapconfig.xml osm2pgrouting src

1-3 routing データベースに osm データを追加します。

4. osm2pgrouting Import Tool
http://workshop.pgrouting.org/chapters/osm2pgrouting.html#run-osm2pgrouting

の 4.2. Run osm2pgrouting を参考にします。
ダウンロードしたファイル名を次のように変更します。

user@deb6-vmw:~/ダウンロード$ mv japan.osm.highway japan_highway.osm
user@deb6-vmw:~/ダウンロード$ ls
---
japan_highway.osm
---

osm2pgrouting を一般ユーザで make したので、次のようにコマンドを実行しました。
データ量が多かったので一度失敗しましたが、仮想ハードディスクの空き容量とメモリの容量を十分にとって再度実行しました。

postgres@deb6-vmw:~$ cd /home/user/ダウンロード/pgRouting-osm2pgrouting-e1757cb/
postgres@deb6-vmw:/home/user/ダウンロード/pgRouting-osm2pgrouting-e1757cb$ ./osm2pgrouting -file ../japan_highway.osm -conf mapconfig.xml -dbname routing2 -clean

routing データベースの内容をみてみます。

postgres@deb6-vmw:/home/user/ダウンロード/pgRouting-osm2pgrouting-e1757cb$ cd
postgres@deb6-vmw:~$ psql routing2
psql (8.4.7)
"help" でヘルプを表示します.

routing=# \d

リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+---------------------+------------+----------
public | classes | テーブル | postgres
public | geography_columns | ビュー | postgres
public | geometry_columns | テーブル | postgres
public | nodes | テーブル | postgres
public | relation_ways | テーブル | postgres
public | relations | テーブル | postgres
public | spatial_ref_sys | テーブル | postgres
public | types | テーブル | postgres
public | vertices_tmp | テーブル | postgres
public | vertices_tmp_id_seq | シーケンス | postgres
public | way_tag | テーブル | postgres
public | ways | テーブル | postgres
(12 行)

~
(stdin):q

ways の内容をみてみます。

routing2=# \d ways

テーブル "public.ways"
カラム | 型 | 修飾語
--------------+------------------+----------
gid | integer |
class_id | integer | not null
length | double precision |
name | character(200) |
x1 | double precision |
y1 | double precision |
x2 | double precision |
y2 | double precision |
reverse_cost | double precision |
rule | text |
to_cost | double precision |
osm_id | integer |
the_geom | geometry |
source | integer |
target | integer |
インデックス:
"ways_gid_idx" UNIQUE, btree (gid)
"geom_idx" gist (the_geom)
"source_idx" btree (source)
"target_idx" btree (target)
CHECK 制約:
"enforce_dims_the_geom" CHECK (st_ndims(the_geom) = 2)
"enforce_geotype_the_geom" CHECK (geometrytype(the_geom) = 'MULTILINESTRING'::text OR the_geom IS NULL)
"enforce_srid_the_geom" CHECK (st_srid(the_geom) = 4326)

(END):q

0 件のコメント: