今回は poly フォーマットを使って .osm.pbf から地図を切り出すってのをやる
おさらい
- localhost で Overpass API を Docker コンテナ で起動
- localhost に クエリを投げて .osm をとりだす
- mkgmap を用いて Garmin Edge 520J 用のイメージを作成
といった作業をした。やってみた感想としては「Docker 化されているとはいえ、データのインポート作業等で時間がかかり、Oerpass API を動かすのは面倒 」である
もうちょっと楽してデータをとりたい
osm.pbf から osm.pbf を切り出す
mapsplit や splitter 、 osmconvert 等のツールを使うと、osm.pbf から 任意の範囲 の osm.pbf を一部切り出すことができる。これで osm を取るだけなら Overpass API を使う必要がなくなる。
任意の範囲と書いたが、poly フォーマットを使って記述することができる
poly = Osmosis polygon filter file format とは?
Osmosis/Polygon Filter File Format - OpenStreetMap Wiki にサンプルと解説がある
australia_v 1 0.1446763E+03 -0.3825659E+02 0.1446693E+03 -0.3826255E+02 0.1446627E+03 -0.3825661E+02 0.1446763E+03 -0.3824465E+02 0.1446813E+03 -0.3824343E+02 0.1446824E+03 -0.3824484E+02 0.1446826E+03 -0.3825356E+02 0.1446876E+03 -0.3825210E+02 0.1446919E+03 -0.3824719E+02 0.1447006E+03 -0.3824723E+02 0.1447042E+03 -0.3825078E+02 0.1446758E+03 -0.3826229E+02 0.1446693E+03 -0.3826255E+02 END !2 0.1422483E+03 -0.3839481E+02 0.1422436E+03 -0.3839315E+02 0.1422496E+03 -0.3839070E+02 0.1422543E+03 -0.3839025E+02 0.1422574E+03 -0.3839155E+02 0.1422467E+03 -0.3840065E+02 0.1422433E+03 -0.3840048E+02 0.1422420E+03 -0.3839857E+02 0.1422436E+03 -0.3839315E+02 END END
解説は ... 省略。実際に使ってみたほうが理解がはやい。せっかちな人は続きを読んで欲しい
poly ファイル用の緯度・経度を作る
まずは Google My Map でラインを引いて KML をエクスポートする (注: 過去に自転車で走ったことのある地域をざっくり囲んでみた)
ダウンロードした KML の <coordinates>
タグに 各頂点の 緯度・経度 が含まれているので、これを使う
<!-- 略 --> <name>ポリゴン 1</name> <styleUrl>#poly-000000-1-77-nodesc</styleUrl> <Polygon> <outerBoundaryIs> <LinearRing> <tessellate>1</tessellate> <coordinates>138.4744263,35.6639909,0.0 138.6557328,35.1294028,0.0 138.9770508,35.0412408,0.0 139.3766592,35.2797601,0.0 139.6774292,35.0502353,0.0 139.7265402,35.3897667,0.0 139.8751831,35.5858516,0.0 139.8532104,36.277493,0.0 139.2764282,36.2619922,0.0 138.9451008,36.2110887,0.0 138.8671875,35.9824514,0.0 138.4744263,35.6639909,0.0</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> <!-- 略 -->
緯度・経度 のペアを poly フォーマットに従って整形する
hibomap 1 138.4744263 35.6639909 138.6557328 35.1294028 138.9770508 35.0412408 139.3766592 35.2797601 139.6774292 35.0502353 139.7265402 35.3897667 139.8751831 35.5858516 139.8532104 36.277493 139.2764282 36.2619922 138.9451008 36.2110887 138.8671875 35.9824514 138.4744263 35.6639909 END END
osmconvert を実行して poly の範囲を切り出す
# * 事前に http://download.geofabrik.de/asia/japan.html から japan-latest.osm.pbf をダウンロードしておいてね # * poly ファイル名は hibomap.poly osmconvert japan-latest.osm.pbf -B=hibomap.poly --out-pbf > hibomap.osm.pbf
さてさて、ファイルは作れた。意図した範囲が切り取れたのかどうかを どうやって確かめたらよいだろうか?
Garmin Edge 520J で確認
mkgmap でイメージ化してみたところ、ギリギリ Garmin Edge 520J に載るサイズにおさまったので 実機テストで OK とした
Google My Map で選択した範囲と同じはず。格子柄の背景が表示されているのは地図データがないエリアになる
Garmin BaseCamp での確認
地図の出来具合を確かめる方法として Garmin BaseCamp を使う方法もある。また別の機会に取り上げよう