CODE HOUSE


Hello, I'm a freelance software engineer.


[OSM] Open Street Map

Open Street Mapとは

最近、iOSのアプリを作ろうと躍起になっておりブログの更新どころではありませんでした。(10日もあいている!!このブログ最大の危機か?)さらに、iOSのアプリを作るはずが、何故かOpen Street Mapに没頭してました。なお、作りたいアプリは地図に関するアプリなので、Open Street Mapをいじり倒しているのは、脱線や現実逃避ではありません。

ところで、Open Street Mapとは?

世の中で一番有名な地図のサイトと言うと、おそらくGoogle Mapsのような気がする。他にも、Yahoo Mapsなど地図のサイトはある。これらの大手企業の地図とは違い、Open Street Mapというのは世界中の有志(英語でCartographer)により作成されている、オープンデータな地図のことである。アカウントを取得すれば誰でも編集ができるよううだ。地図のデータなんてのはGoogleにはかなわないだろうと思っていたのであるが、そんなことはない。調べていくほどにGoogle Mapsとはまた違った意味でOpen Street Mapにはすごい部分がたくさんあることに気がついたのである。

そんなわけで、Open Street Mapの改めて再認識した面白さについて軽く紹介したいと思う。

Open Street Mapをちら見する

Open Street Mapの最大の魅力は、オープンなデータであるということである。これはどういうことかと言うと、例えばGoogle Mapsので地図を表示する場合、予めGoogleが用意した地図画像を表示している。地図の画像から何処に道路があって、どこにどんな建物があってというのが見てわかるが、あくまでその画像を見た人による判断でわかるだけである。

Open Street Mapでも地図を表示する際は、予め用意した地図画像を表示しているのであるが、その道路や建物の情報は全て線や多角形(ポリゴン)の座標データとして公開されている。(Googleも同様の座標データを持っていると思われるが、非公開である)

このデータがどれ程の物かは、Open Street Mapのサイトで確認することができるので少し見てみよう。

大阪付近を見てみる

例えば大阪駅付近の、国道1号線と国道2号線の交差点「梅田新道」に関して、どのようなデータがあるのかを検索してみたのが下記である。

OpenStreetMap:大阪、梅田新道交差点

画面の左に検索の結果が表示されている。信号機の名前、この交差点にまつわる国道(1号、2号、25号、176号)だけでなく、地下鉄やJRまでもが結果にでているのがわかる。この結果にマウスカーソルを合わせると(クリックではなくマウスオーバー)、その情報が地図上に表示される。

画面右のを選択した後、地図の好きな場所を選ぶと、同じようにその場所に関するデータを検索できる。(ある程度地図を拡大しないと機能しないので注意)

国道1号を見てみる

さらに、国道1号を選択してみる。国道1号に関する情報が表示される。画面の右に国道の名前、日本語だけでなく、英語名も表示されている。highway=trunkは国道を表している。そしてrefは国道番号が設定されている。これは県道などの場合は県道番号になる。

highwayにどんなものが設定されるかは下記参照

JA:Key:highway - OpenStreetMap Wiki

海外では、いろんな道に名前がついていることが多いような気がする。しかし日本の場合、道路の名前というのはあまり一般的ではないような気がする。誰かに道を聞く場合も、どちらかと言うと番号で話した方が通じるような気がする。もちろん京都の様に通りの名前の方が有名な場合もあるし、地元の人しかわからない俗称で道路名が流通している場合もある。

とにかく、昔からある道路の国道番号、県道番号を簡単に調べる方法がないものかと思っていた。しかし、Open Street Mapにはかなりのカバー率でデータが存在していることがわかり、これは何かに使えるのではと思った。

さて上記の1号線であるが、線が東天満の交差点までで終わっている。Open Street Mapでは、このように1号線がかなりぶつ切りのデータとして登録されている。1号線全体のデータはこれらぶつ切りのデータをまとめたリレーションというデータにグルーピングされている。画面左の情報をスクロールすると、一番下にリレーション国道1号というのがある。(残念ながら、国道1号のデータは大きすぎてOpen Street Map上では表示することができない)

Open Street Mapのデータを入手してみる

これらの膨大なデータ。ちまちまと、Open Street Mapのサイトで取得するわけにも行かないし、そもそもOpen Street Map自体は高負荷を想定していない。なので、この膨大なデータをまとめて取得する方法を調べてみた。詳しくは下記にまとめてあった。

JA:Planet.osm - OpenStreetMap Wiki

全体の最新データを取得する場合は、下記からLatest Weekly Planet PBF Fileをダウンロードすればいいようだ。(ただし、滅茶苦茶でかい。2016年9月時点で33GB!!)

Planet OSM

上記のファイルは大きすぎて現実的ではない。特定の地域ごとのファイルが欲しい場合は下記からダウンロードする。

download.geofabrik.de

ダウンロードしたデータの使い方

上記のでダウンロードしたデータの使い方はいろいろあるようだが、いろいろ試したところ下記のような手順になる。

  1. ダウンロードしたデータが大きすぎる場合、特定の地域に分割する。(もしくは上記で地域ごとのデータをダウンロードする)
    • 分割するツールには、osmconverter、osmosisというのがありそう。詳しくはまだ調べていない。
    • osmconverterはCentOS6.5、macOSともにインストール、ビルドに断念した。
    • osmosisはmacOSの場合、homebrewで簡単にインストールできた。
  2. データを簡単に扱えるようにデータベース化する。具体的にはPostgreSQLに入れてみる。
    • PostgreSQL上で、PostGISというデータが扱えるようにする。
    • PostGISってのは、PostgreSQLのプラグインみたいなもの??
    • データベースへの変換には、osm2pgsqlというツールを使う。これもmacOSならhomebrewでインストールできた。
  3. PostgreSQLになったデータをいじってニヤニヤする。
    • どんなデータがあるのか、ここに来て具体的に見ることができるので楽しい瞬間。

この後はデータを使って、いろんなことができそうである。例えば下記のようなことも可能なようである。

  • 独自のMap Serverを作る。これもいろいろな方法があるようだ。
  • SVG形式のタイルデータを作成する。

具体的に自分で試してみたことについては、更に詳しく別途記事にしたいと思う。