attribute: Phillie Casablanca

OSMデータから他言語をpostgresにロードする方法



ubuntu 14.04を使用



Background


最近、マップ上にデータを表示するためのマップほしいと思ってきて、時間があったので、作ろうと決意した。


検索した結果、やっぱり、同じことを考えている人がいた!
https://www.mapbox.com/blog/designing-minimalist-openstreetmap-baselayer/


以前のプロジェクト、オフラインのマップサーバを作るために、OpenStreetMap (OSM)のデータをダウンロードして ( http://download.geofabrik.de/asia/japan.html )、使って、mapboxのTileMill ( https://www.mapbox.com/tilemill/ ) にロード、マップサーバのタイルを作成した経験があった。


上記のブログをみるとそのように作っているようですが、結果のデザインをGITHUBなどで残していないようだ。
よんでみると、他人のOSM Bright ( https://github.com/mapbox/osm-bright )をテンプレートとして作ったようだが、
あっちこっち色の設定が多いので、探してみたら、すでに白黒のものがあった!


https://github.com/aaronlidman/Toner-for-Tilemill


これが、オンラインマップデザインの王様Stamen Designの"toner" ( http://maps.stamen.com/toner/#12/37.7706/-122.3782 )を真似してつくったようだ。
使いたい目的には、ちょっと暗いが、これだったら、色調整が少なくて済むと思って、Toner For Tilemillをベースにして進んでいる。


さって、調整していくと気がついた。都市名がすべてローマ字。。。




OSMデータからマップ上に日本語の表示へ


OSMのデータをみてみると、日本語が入っているしているようだ。


とりあえず、準備する方法を下記


OSMデータを http://download.geofabrik.de/asia/japan.html からダウンロードしたら、osm2pgsqlを準備する。


https://github.com/openstreetmap/osm2pgsql


osm2pgsqlをGITHUBからPull:
(まだ、gitがインストールされていない場合、sudo apt-get install gitでインストール)


git clone https://github.com/openstreetmap/osm2pgsql.git


そこで”default.style”をコピーして、編集:


cd osm2pgsql
cp default.style osm2pgsql.style


osm2pgsql.style内に、下記の行のしたに



node,way name text linear

これを追加:



node,way name:ja text linear


Note


OSM tagについて下記のリンクへ参照
http://wiki.openstreetmap.org/wiki/JA:Map_Features



修正が終わったら、dbを作って、DBへロードする:



sudo -u postgres pgsql -c "CREATE DATABASE osm_db;"
sudo -u postgres pgsql -d "osm_db" -c "CREATE EXTENSION postgis;"

sudo -u postgres osm2pgsql -c -G -S ./osm2pgsql.style -d osm_db ~/maps/japan/japan-latest.osm.pbf -C 22000


これでDBに必要なデータがロードされる。
しかし、これを地図上に使うなら、簡単には、Tilemill内で、DBレーヤを追加することなんだが、
気がついたら、Toner for Tilemillには、都市名がきれいに表示されるように、既に処理して、ズームレベルごとに、SHPファイルに用意してある。


つまり、都市名が重なってしまう。


同じようなきれいな表示するなら、Dymo ( https://github.com/migurski/Dymo/ )があるようだ。
それを使って、結果のgeojsonを作ってみたんだが、なぜかファイルをロードしてくれない。。。


ちなみに、osm2pgsqlで作ったDBからdymoの入力CSVを作成してくれるスクリプトをつくってみた:


https://github.com/monkut/dymo_label_prep


(そのスクリプトにあるSQLQueryをレーヤとして、できれば、日本語レベルの表示問題が解決されるかも。。。。)



monkut // Aug. 23, 2014 // 10:42 a.m.