2015/12/24 GAMIN GPS用 Birdeye JNX地図作製ツール製作
Unfortunately this text is in Japanese only.
最新情報はコチラで →
[GPS地図関連]
GARMIN GPS用のフリーの登山地図作製ツールでラスター地図からJNX形式で作成してくれる秀逸なフリーソフト(GPL)としてgsijnx と ymapjnx がある。それぞれ国土地理院とヤフー地図のweb service よりラスター画像を取得しJNX形式のBirdeyeファイルを作成する。1500stepほどのPythonというプログラミング言語で記述されている。
便利に使わせていただいていたが、国土地理院の旧v3?のサービスが停止されv4の新地図に切り替わった。v4のタイル指定は
[web api の国際標準化] で書いたがGoogle方式のディフェクトスタンダートに則っていて歓迎すべき事なのだが、v3の仕様で作成されたツールが動作しなくなる。
gsijnx はエラー吐いて動作不可。 ymapjnx は動かしてはいないが動作するだろう。
山仲間よりタイミング悪く冬山山行用に北ア・南アあたりの地図作製の依頼が有ったがgsijnxが使えない。Pythonのソースを眺めて改造を試みるも旧apiの画像仕様はピクセル数が異なる様でURLスキームを単純に変更した位では無理っぽい。仕方ないので自前でプログラムを突貫工事で作成する事にした。
要件定義は
- gsijnx やymapjnxの様にwebソース特定ではなく、複数サービスをレイヤリングできる事
- google XYZ 形式タイル仕様のすべての地図が使用できる事
- 地図作成範囲が簡単に指定できる事
- インストールなしで即microsoft windowsで動作する事
- できればmonoでも動作する様にVB.NETで書く(C#に書き直すかも)
2日間かけて何とか最低限の機能が出来ました。
レイヤー①のスナップショット
1〜2レイヤーはヤフー地図を指定。
基本的には経度・緯度範囲指定なのだが、より簡単に指定可能な様に1次メッシュ単体や2次メッシュ範囲を指定して「計算」ボタンを押すと経度・緯度範囲を算出する仕組みを採用。
左右で同じ様な画が出てるが元画像(.png)と圧縮画像(.jpg)の比較のため。
※画像は合成したイメージです
レイヤー③のスナップショット
3〜4レイヤーは電子国土地図を指定。
JNXマップの仕様で最大5レイヤーまでレイヤリング指定可能。Google map も技術要件的には指定可能だがライセンスの問題があるらしいし、使用しなくても良いでしょう。
※画像は合成したイメージです
まだ作成中ですがOpenLayer3を使用した範囲指定に使用する予定の画面。
※画像はホンモノです
マウスのドラッグで地図の移動、フォイールで拡大縮小が簡単にできるので便利。
流行りの技術で遊んでます。
※画像はホンモノです
GARMIN DAKOTA20に転送して表示させた実際のスナップショット。
上段:穂高周辺
下段:八ヶ岳連峰
更にOpenStreetMapとレイヤリングしても正しい位置に表示されている!よしよし。
今後の課題は。。。
- web client の非同期化による高速化
- OpenLayer3 による位置指定、2次メッシュ図葉名による検索対応
- 異なるweb service指定時のマルチスレッド化による並列処理
- JPEG画像の圧縮品質指定、画像処理による見易さの改善
- 地図定義ファイル編集のGUI化
- 取得 .png ファイルのキャッシュデータベース化
ある程度機能アップとソース整理が出来たらフィールドテスト後に公開しようかなぁ〜。
燃え尽き感が有るのでソース公開して後はお好きにとなるかも。
因みに上記の地図作製設定XMLファイル(ezjnxconf.xml)
<div class="code">
<root>
<connection>
<proxy>0</proxy>
<poolmax>8</poolmax>
</connection>
<webservices>
<service id="0">
<name>OpenStreetMap</name>
<type tag="Google">0</type>
<url>[a,b,c,d].tile.openstreetmap.org/{Z}/{X}/{Y}.png</url>
<scalemin>0</scalemin>
<scalemax>18</scalemax>
<description></description>
</service>
<service id="1">
<name>電子国土</name>
<type tag="Google">0</type>
<url>cyberjapandata.gsi.go.jp/xyz/std/{Z}/{X}/{Y}.png</url>
<scalemin>0</scalemin>
<scalemax>18</scalemax>
<description></description>
</service>
<service id="2">
<name>Yahoo!(bold)</name>
<type tag="Yahoo!">1</type>
<url>m.map.srv.yimg.jp/m?&r=1&style=base:bold&x={X}&y={Y}&z={Z}</url>
<scalemin>0</scalemin>
<scalemax>15</scalemax>
<description></description>
</service>
</webservices>
<jnx>
<map>
<productname>Sample Subscription Product</productname>
<mapname>Sample Map Name</mapname>
<description></description>
<layer scale="13" webid="2" zoom="13">
<layer scale="16" webid="2" zoom="14">
<layer scale="17" webid="1" zoom="15">
<layer scale="18" webid="1" zoom="16">
<!--
<layer Scale="17" WebID="1"/>
-->
</layer></layer></layer></layer></map>
</jnx>
</root>
</div>