「神社の位置データを共有する」GeoJSON&GitHub&OSM３分クッキング

（この記事は [FOSS4G Advent Calendar 2015](http://qiita.com/advent-calendar/2015/foss4g) の投稿記事です。）

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

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

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

[Googleトレンドで、全世界の検索ボリュームの中でのKML、SHPデータの相対ボリューム](
https://www.google.co.jp/trends/explore#q=KML%2C%20GeoJSON%2C%20SHP)を比較すると、2007年にはKMLがSHPとの立ち位置を逆転していますが、その差は大きく離れるわけではないこともまた読み取れます。
![スクリーンショット 2016-01-04 7.03.53.png](https://qiita-image-store.s3.amazonaws.com/0/18691/2d3ab0ac-d497-ea8c-46bf-3009aeaa5c5a.png)

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

その理由を述べます。

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

というわけで、

ここでは、どれだけGeoJSONが扱いやすくなったのか、[OSM](http://osm.org)と[GitHub](https://gist.github.com)を使って実演してみます。


#新年なので、神社のPOIデータを[OSM](http://osm.org)から引っ張り出す

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

2016年1月3日現在、[世界で神社として登録されているPOIデータ](http://taginfo.openstreetmap.org/tags/religion=shinto#map)は約5,000箇所以上になるようです。

![スクリーンショット 2016-01-04 7.44.49.png](https://qiita-image-store.s3.amazonaws.com/0/18691/9d271e76-55b0-a875-370e-9a14650309da.png)

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


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

この神社タグ `religion=shinto` を使って、 [overpass-turbo API](http://overpass-turbo.eu/s/dx2) で検索してみます。検索用のスクリプトは以下の内容ですが、[TagInfo](http://taginfo.openstreetmap.org/tags/religion=shinto#map) の ![スクリーンショット 2016-01-04 8.16.23.png](https://qiita-image-store.s3.amazonaws.com/0/18691/6b63390f-4819-74c8-a1f2-96e0082f2c06.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) をお使いください。 http://overpass-turbo.eu/s/dx2 

![https://cloud.githubusercontent.com/assets/416977/12081465/33fa2802-b2bd-11e5-9c2b-33ca9e349b95.png](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](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](https://cloud.githubusercontent.com/assets/416977/12081393/98ed8e78-b2ba-11e5-9cd3-3df098823ac8.png)

##迷わずGistへ直接エクスポート
あとは、ためらいなくエクスポートボタン ![スクリーンショット 2016-01-04 8.31.46.png](https://qiita-image-store.s3.amazonaws.com/0/18691/1229ce77-98d1-f494-aa42-d641a3931431.png) をクリックして、 "GeoJSONをgistとして保存" を選択。

![https://cloud.githubusercontent.com/assets/416977/12081487/d4a10474-b2bd-11e5-893a-b21f7575e48b.png](https://cloud.githubusercontent.com/assets/416977/12081487/d4a10474-b2bd-11e5-893a-b21f7575e48b.png)

しばらくすると

![スクリーンショット 2016-01-04 7.49.55.png](https://qiita-image-store.s3.amazonaws.com/0/18691/c094001c-1100-37be-9fa2-2d861f811f66.png)

と表示されます。

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

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

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

![スクリーンショット 2016-01-04 7.50.40.png](https://qiita-image-store.s3.amazonaws.com/0/18691/576c0e17-3110-7739-7ad0-b76bfac1541d.png)

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

![スクリーンショット 2016-01-04 7.53.48.png](https://qiita-image-store.s3.amazonaws.com/0/18691/ce7d9df5-7ffe-05e0-d860-260a13b998c5.png)


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


Happy Mapping!! :-)