お店レビューのようなロケーションベースのサービスを作るときに悩ましいのが、ランドマークの地点情報をどこから持ってくるのかということだと思うのですが、OpenStreetMapのデータとAPIが便利だったので、簡単に紹介します。
ライセンス
まずデータのライセンスから。ライセンスは次のようになっています。データの再配布をしないようなサービスであれば、クレジット表記のみでコピーを含めて利用可能なようです。
OpenStreetMapとその協力者をクレジットすれば、データを自由にコピー、配布、送信、利用することができます。変更したり翻案したりしたデータは、同じライセンスに従って提供することができます。
FAQより
3b.OSMデータから派生したデータを持っている場合、それを配布しなければならないのでしょうか?
- ライセンスはあらゆるデータを配布したり、利用可能な状態にしておくことは強制していません。
Overpass API
OpenStreeMapのデータは、Overpass APIを通して検索することができます。
Overpass API(別名 OSM3S)とは、OSM地図データに含まれる情報のなかから指定した部分のみを抜き出す機能をもつ、読み出し専用のAPIです。サービスはWebを介したデータベースとして提供されています。APIに対してクエリを行うことで、クライアントはクエリの内容に従った結果データを受け取ることができます。
Overpass APIのコードは公開されていて、自分でインスタンスを立てて使うことができますが、ありがたいことにいくつかパブリックに利用な可能なインスタンスが用意されています。目安の制限が書かれていますので、これを越えるリクエストを投げる場合は、自分でインスタンスを用意しましょう。
http://overpass-api.de/ クエリ用アドレスは http://overpass-api.de/api/ (4 cores, 64 GB RAM).
http://overpass.osm.rambler.ru/ クエリ用アドレスは http://overpass.osm.rambler.ru/cgi/ (8 cores, 64 GB RAM).
openstreetmap.frサーバの Overpass API
どのサーバも、1日に合計おおよそ1.000.000リクエストまでを受け付けることが可能です。また、1日に10.000クエリ、あるいは5GB以下のデータ転送量であれば、他のサービス利用者に影響をあたえることはほぼ無いでしょう。
Overpass APIサンプル
ある場所の近くの名前のあるランドマークを検索してJSONで取得する、というようなケースのサンプルを示します。Overpass APIのクエリは、XMLあるいは Overpass QL形式で投げることができます。
クエリ
<osm-script output="json">
<query type="node">
<around lat="51.249" lon="7.148" radius="100.0"/>
<has-kv k="name" />
</query>
<print />
</osm-script>
結果
{
"version": 0.6,
"generator": "Overpass API",
"osm3s": {
"timestamp_osm_base": "2014-11-27T16:26:02Z",
"copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
},
"elements": [
{
"type": "node",
"id": 677518646,
"lat": 51.2486074,
"lon": 7.1485793,
"tags": {
"bus": "yes",
"highway": "bus_stop",
"name": "Unterer Grifflenberg",
"public_transport": "platform"
}
}
]
}
クエリ実行は、Overpass Tourboを使うと簡単に結果を確認できて便利です。