OpenStreetMap

(この記事は FOSS4G Advent Calendar 2015 の投稿記事のバックアップです。原本は Qiita に投稿しました。)

遅ベントカレンダーということで、年が明けて三が日にこれを書いていますが、せっかくなので今年の豊富とTIPSをメモしたいと思います。

2016年は、SHPファイルからGeoJSONへの世代交代の年!

というわけで、今から10年前に世の中に登場したKMLデータ形式が地理空間情報の世界を塗り替えても、すべてをKMLに置き換えられない理由がいくつかありました。その一番の理由がそれまでのデファクトスタンダードだったSHP(シェープファイル)形式の存在です。

Googleトレンドで、全世界の検索ボリュームの中でのKML、SHPデータの相対ボリュームを比較すると、2007年にはKMLがSHPとの立ち位置を逆転していますが、その差は大きく離れるわけではないこともまた読み取れます。 スクリーンショット 2016-01-04 7.03.53.png

一方で、じわじわとその足元から存在感を示してきているのが GeoJSON形式です。 ひとことで言うと、KMLで実現できなかったSHPファイルの世代交代は、このGeoJSONが近い将来成し遂げると思います。

その理由を述べます。

  • データ構造がシンプル、理解しやすい。
  • データと表現が分離されている(HTMLとCSSのような関係)
  • SHPが扱える点・線・面のベクタ型フィーチャのみにデータ型が限定されている。
  • 文字化けトラブルが起きにくい。文字コードが UTF-8 に限定されている。
  • 属性データの格納の自由度が高い。SHPのようにフィールド名制限とかほぼない。
  • デフォルトの座標系/測地系が EPSG:4326(緯度経度座標系/WGS84測地系)。
  • ヘッダーにcrsプロパティを記述することで任意の座標系/測地系に指定可能。
  • トポロジ構造化した TopoJSON 形式も用意されている。
  • JSON構造がベースなのでJavaScriptなどウェブマップサービスで扱いやすい。
  • QGISを始め多くのFOSS4Gツールでは既に読み込み/書き込みに対応している。
  • なによりGitHubで簡単に可視化できる。

というわけで、

ここでは、どれだけGeoJSONが扱いやすくなったのか、OSMGitHubを使って実演してみます。

新年なので、神社のPOIデータをOSMから引っ張り出す

神社タグは religion=shinto

OpenStreetMap(以下OSM)には神社仏閣の位置データが多数格納されていますが、日本の神道の教会でもある神社はOSM上ではお祈りする場所として amenity=place_of_worship ( 稲荷神社のような道端の小さな神社はhistoric=wayside shrineとして定義) 、宗教として神道を意味する religion=shinto とタグを記述します。

2016年1月3日現在、世界で神社として登録されているPOIデータは約5,000箇所以上になるようです。

スクリーンショット 2016-01-04 7.44.49.png

http://taginfo.openstreetmap.org/tags/religion=shinto#map

神社タグからOverpass-Turbo APIで検索

この神社タグ religion=shinto を使って、 overpass-turbo API で検索してみます。検索用のスクリプトは以下の内容ですが、TagInfoスクリーンショット 2016-01-04 8.16.23.png ボタンをクリックすると簡単にスクリプトが生成されます。

/* This has been generated by the overpass-turbo wizard. The original search was: “"religion"="shinto" global” */ [out:json][timeout:2500]; // gather results ( // query part for: “religion=shinto” node["religion"="shinto"]; ); // print results out body; >; out skel qt;

ここでは横着して、既に用意したスクリプト をお使いください。 http://overpass-turbo.eu/s/dx2

https://cloud.githubusercontent.com/assets/416977/12081465/33fa2802-b2bd-11e5-9c2b-33ca9e349b95.png

スクリプトが読み込まれたら、実行ボタン ![スクリーンショット 2016-01-04 8.25.00.png] (https://qiita-image-store.s3.amazonaws.com/0/18691/da46b2ce-5461-05f0-3cad-7834ac08f41e.png)をクリックすると、検索処理が開始されます。

https://cloud.githubusercontent.com/assets/416977/12081459/faf73bee-b2bc-11e5-9b52-b8f6d4f4696f.png

右下のノード数が5,000ポイントを超えていたら正解!

https://cloud.githubusercontent.com/assets/416977/12081393/98ed8e78-b2ba-11e5-9cd3-3df098823ac8.png

迷わずGistへ直接エクスポート

あとは、ためらいなくエクスポートボタン スクリーンショット 2016-01-04 8.31.46.png をクリックして、 “GeoJSONをgistとして保存” を選択。

https://cloud.githubusercontent.com/assets/416977/12081487/d4a10474-b2bd-11e5-893a-b21f7575e48b.png

しばらくすると

スクリーンショット 2016-01-04 7.49.55.png

と表示されます。

GeoJSONファイルを自動的にマッピングしてくれるGitHub

同じタイミングで、ウェブブラウザにこのように GitHub の Gistページが表示されます。GistにはGitHubのアカウントがなくても、anonymous という、アカウント無しの状態でファイルの投稿ができます。

https://gist.github.com/anonymous/0c06bc837a25bc931f41

スクリーンショット 2016-01-04 7.50.40.png

ちゃんと、ウェブマップとして、表示範囲を変えたり、ズームレベルも変更できます。 また、属性情報は対象の地物をクリックすることでポップアップ表示されます。

スクリーンショット 2016-01-04 7.53.48.png

まとめ

  • 今後、SHPファイルはGeoJSONに置き換わっていく
  • OSMも含めて、データの受け渡しはGeoJSONになっていく(既になっている)
  • GeoJSONファイルの受け渡しには GitHub が便利(とくに Gist )
  • GitHub に投稿した GeoJSON ファイルは自動的にマッピングされる(背景はOSM)
  • OSM → Overpass-Turbo API → Gist on GitHub の流れが最強!

Happy Mapping!! :-)


Login to leave a comment