====== planet.osm の日本部分だけを効率よく更新する方法 ====== **2015-01-03 時点で,ここに書いてある情報は「実験中」です.** ===== planet.osm とは何か? ===== http://wiki.openstreetmap.org/wiki/JA:Planet.osm に説明があります通り,planet.osm とは,OpenStreetMap データベースのスナップショットです.編集履歴はありませんが,レンダリングの元になるデータの事と言って良いと思います. ここでは,planet.osm から,日本のエリアだけを抽出し,またネットワークやマシン負荷がなるべく低い方法でデータを更新する方法を記載します. ===== 手っ取り早い方法が既にあるのでは? ===== 一番手っ取り早いのは,http://download.geofabrik.de/ から,日本のOSMデータをダウンロードする事です. しかし,日本のOSMデータは,2015年1月3日現在で,.osm.bz2 形式のもので約1.4GByteあります..bpf 形式でも約 930MByte あります. これを毎回ダウンロードすると時間がかかりますし,変更の無い部分も毎回ダウンロードする事になるので,できるだけ効率の良い方法で日本の planet.osm が出来ないかを実験します. ===== 前知識 ===== 一言で "planet.osm" と言っても,複数のファイル形式があります. - XML 形式のもの(拡張子は .osm)\\ これは,純粋なテキストファイルで,XML 形式で構成しています.OpenStreetMap では,このXML形式のものを,bzip2 で圧縮している事が多く,その場合の拡張子は ".osm.bz2" が付けられます. - BPF 形式のもの(拡張子は .bpf)\\ http://wiki.openstreetmap.org/wiki/PBF_Format にその説明があります(英語).どうも Google protocol buffers がベースのようです.これは完全なバイナリですが,後述する osmconvert 等のツールで扱うことが出来ます. - o5m 形式のもの(拡張子は .o5m)\\ http://wiki.openstreetmap.org/wiki/O5m にその説明があります(英語).".osm" 形式と ".bpf" 形式の中間にあるようです. BPF 形式のファイルは,非圧縮状態でも .osm.bz2 よりも小さいファイルになるようですので,ここでは BPF 形式をメインに扱います. ===== 前準備 ===== - Linux マシン\\ マシンスペックは,高ければ高いほど良いですが,私は Core i5 2.67GHz,RAM 8GByte で運用しています.HDD は 500GByte を2機入れています.HDD は多いければ多いほうが良いです. - Linux ディストリビューション\\ ここで記載する方法は,基本的にはどのディストリビューションでも動作するはずですが,私は Debian Wheezy amd64 をインストールしています.64bit OS であれば,RAM を増設すれば更に多くの RAM が使えます.私見ですが,planet.osm を扱うには,RAM が多ければ多いほうが良いと考えています. - インターネット回線\\ 後述しますが,初回は大体 27GByte のファイルをダウンロードします.後はあまり大量のダウンロードはないです Linux マシンのパワーが主です. - osmctools\\ osmctools は,osmconvert や osmupdate と言うツールがあり,この実験ではこれらのツールを使用します.\\ Debian Wheezy の場合,[[misc:20150105_osmctools_debian_wheezy|Debian Wheezy に osmctools を入れる]]の手順で,osmctools をインストールできます. ===== 初回のダウンロード ===== 初回では,以下のファイルをダウンロードします. - planet-latest.osm.pbf\\ http://planet.osm.org/ にアクセスし,pbf/ ディレクトリ以下にあります.2015年1月3日現在で,約 26GByte あります. - planet-latest.osm.pbf.md5 \\ planet-latest.osm.pbf と同じディレクトリにあります.このファイルは planet-latest.osm.pbf のMD5ハッシュ値です.planet-latest.osm.pbf が正しくダウンロードできているかどうか,このMD5ハッシュ値と比較して下さい. - Polygon Filter File\\ http://download.geofabrik.de/asia/japan.html にアクセスして,japan.poly をダウンロードして下さい.これには,planet-latest.osm.pbf から日本部分だけを切り出す範囲の情報が入っています. 私のネットワーク環境は 100Mbps で,上記全てをダウンロードするのに概ね4時間ほどかかりました. ===== 日本のOSMデータを抽出 ===== 必要なファイル全てを Linux マシンにダウンロード出来たら,以下のコマンドを実行します. $ osmconvert -B=japan.poly -o=planet-japan-latest.osm.pbf planet-latest.osm.pbf 上記のコマンドを実行することで,全世界のデータが含まれている planet-latest.osm.pbf から,japan.poly で指定されている範囲のみを抽出して,planet-japan-latest.osm.pbf に保存します. 私が実験した時は,planet-latest.osm.pbf は約 27GByte のサイズですが,日本部分だけを抽出した planet-japan-latest.osm.pbf は約 900MByte です.この処理中の osmconvert の使用RAMサイズは,VSZ で概ね 1.7GByte くらい使っていました. 以降は,planet-japan-latest.osm.pbf を主に扱います. ===== 日本のOSMデータを最新へ ===== osmconvert では,単にデータの抽出を行うのみで,OSMデータは既に最新のものがあるはずです. OSMデータを最新へ更新するには,osmupdate コマンドを使います. $ osmupdate -B=japan.poly -v planet-japan-latest.osm.pbf planet-japan-new.osm.pbf 上記のコマンドを実行すると,osmupdate が http://planet.osm.org/ にアクセスして,changesets をダウンロードして最新の情報へ更新し,planet-japan-new.osm.pbf に保存します. osmupdate の詳しい利用方法は,http://wiki.openstreetmap.org/wiki/Osmupdate にあります. ===== BPF形式の planet.osm をXML形式に変換 ===== BPF 形式の planet.osm はバイナリですので,ちょっとした確認には使いにくいのですが,osmconvert を使用するとXML形式に変換できます. $ osmconvert planet-japan-latest.osm.pbf | more osmconvert は,標準ではXML形式で標準出力に変換データを出力するので,more コマンドなどで結果を確認できます.