読者です 読者をやめる 読者になる 読者になる

Garmin Edge 520J の地図を作る - poly フォーマット入門

今回は poly フォーマットを使って .osm.pbf から地図を切り出すってのをやる

おさらい

前々回前回 のエントリでは

といった作業をした。やってみた感想としては「Docker 化されているとはいえ、データのインポート作業等で時間がかかり、Oerpass API を動かすのは面倒 」である

もうちょっと楽してデータをとりたい

osm.pbf から osm.pbf を切り出す

mapsplitsplitterosmconvert 等のツールを使うと、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 をエクスポートする (注: 過去に自転車で走ったことのある地域をざっくり囲んでみた)

f:id:hiboma:20160916143856p:plain

ダウンロードした 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 とした

f:id:hiboma:20160916152459j:plain

Google My Map で選択した範囲と同じはず。格子柄の背景が表示されているのは地図データがないエリアになる

Garmin BaseCamp での確認

地図の出来具合を確かめる方法として Garmin BaseCamp を使う方法もある。また別の機会に取り上げよう


参考

osm-for-garmin.org

osm-for-garmin.org

masarap.club