前回の続き
パブリックで公開されている Overpass API , Overpass turbo は便利。ソースも GitHub で公開されているので自分で動かしてみよう
なお、Garmin Edge 520J 用のイメージを作るにあたって 必須の作業ではない
Overpass API のソース
うーん 動かすのが難儀そう (諦めが早い
Overpass API on Docker
Overpass API を Docker で動かないかと探すと ... あるもんだ。
Mac OS X で Docker を扱う方法、そもそも Docker とは何か? については割愛する。本エントリを書く際は Docker for Mac を使った
Overpass API on Docker on Mac OS X
そこそこ時間のかかる準備作業が必要
↓ の通り Overpass API は API なので、データベースに OSM地図データをつっこまないといけない
Overpass API(別名 OSM3S)とは読み出し専用のAPIであり、OSM地図データの中から個別に選択された部分を取り出します。Webを介したデータベースとして動作します。利用者はAPIに対してクエリを送り、クエリに対応したデータ セットを受け取ります。 refs http://wiki.openstreetmap.org/wiki/JA:Overpass_API
ところが 全世界の OSM地図を扱おうとすると流石にデータがでか過ぎるので http://download.geofabrik.de/ から自分の扱いたいエリア(= 今回は日本 ) に絞られたサブセットを使って Docker イメージをビルドする
... という説明は明記されていないが building-the-docker-image の手順を読んだ感じの含意と思う
docker-overpass-api の docker build
下記の手順をとった
git clone https://github.com/mediasuitenz/docker-overpass-api cd docker-overpass-api # 日本のみに絞った japan-latest.osm.bz2 をダウンロード (ファイル名は planet.osm.bz2 ) # # 元々のサンプルはニュージーランドの地図を使っている # curl -o planet.osm.bz2 http://download.geofabrik.de/australia-oceania/new-zealand-latest.osm.bz2 # curl -o planet.osm.bz2 http://download.geofabrik.de/asia/japan-latest.osm.bz2 # planet.osm.bz2 がでかいので非常に時間がかかる 回避方法ないだろか docker build -t mediasuite/overpass-api .
Docker for Mac で docker build するに当たって何度かつまづいたところを 📝 しておこう
- Docker for Mac を使ったが RAM 2GB だと途中で止まってしまった
- RAM 10GB ほどに増やしてビルドした。7〜8GB あれば十分かも
- CPU は 4コアにしておいた
- ビルドで一番時間かかる箇所 は並列化されてないようだから4コアの意味はなさそうだ。2コアほどでよいかも
overpass-api コンテナの起動
docker build できたらコンテナを起動しよう
docker run -d -p 80:80 mediasuite/overpass-api
サンプルクエリを投げる。api のエンドポイントは /api/interpreter
# サンプルクエリを curl で POST する $ echo 'node["name"="Trekストア六本木"];out;' | curl -d @- http://localhost/api/interpreter <?xml version="1.0" encoding="UTF-8"?> <osm version="0.6" generator="Overpass API"> <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> <meta osm_base=""/> <node id="1763146176" lat="35.6591576" lon="139.7279059"> <tag k="name" v="Trekストア六本木"/> <tag k="shop" v="bicycle"/> <tag k="wheelchair" v="yes"/> <tag k="wheelchair_toilet" v="unknown"/> </node> </osm>
やったー!
フロントエンドが欲しいよね
APIは動かせたものの、人間が直接 扱うにはちょっと不便。 http://overpass-turbo.de みたいにイケテる画面でテストしたい。次は Overpass turbo を動かしてみよう
overpass-turbo on Docker
Docker で動くようなあれこれは公開されていないのだった。HTML 1枚で動くので、既存の nginx コンテナを利用してみた
git clone https://github.com/tyrasd/overpass-turbo.git cd overpass-turbo # overpass-api とバッティングするので 8080 とした docker run -d -p 8080:80 -v $PWD:/usr/share/nginx/html:ro nginx
http://localhost:8080 を開いて下記のような画面が出たら OK
API のエンドポイントが //overpass-turbo.eu/
に向いているので変更が必要。設定を開き、先ほど docker で動かした ローカル Overpass API のエンドポイント URL //localhost/api
をセットする
テストクエリで家の近所あたりを選択してみると ...
やったね! 自転車屋を探したりして遊ぶ
http://overpass-turbo.de と ほぼ 同等なローカル版が動かせた。
注意点として日本のOSM地図しかインポートしていないので、海外のノードを探そうとしたりして見つからない!!!1 となってハマらないように。後は、API がローカルにあるとはいえ でかいデータセットを取るクエリを投げるとブラウザが例外を出す。
加えて 下記の 地図タイルサーバー
についても目を通して頂きたい
⚠ 地図タイルサーバーについて
ここまでの手順では全てをローカルで動かせていない。 地図タイルサーバー
が下記のような設定になっている
//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
tile.openstreetmap.org とは?
JA:タイル利用規約 - OpenStreetMap Wiki をよく読まれたし
しかしながら、OpenStreetMap が持っているサーバは全て寄付によるリソースで運用されています。その能力は厳しく制限されています。OSMタイルのヘビーな利用はマップを編集する人々の能力を削ぐことになりかねませんし、またハードウェアや通信帯域を提供してくれている個人の寄付及びスポンサーシップの乱用にあたります。そのため、我々はタイル利用者にこのタイル利用ポリシーに従うことを要求します。
乱用して迷惑をかけないようにしよう (手元でちょっと動かすぶんには問題ないように思うのだが、閾値がちょっと分からない。地図タイルサーバーもローカルで動かせると細かいことを気にせずに更にガシガシ遊べるだろう
疲れたので本エントリはここまで