GarminGPSの地図を自作するための環境構築メモです。今回はMSYS2上に環境を構築しました。処理には小道具展示室さんが公開している設定ファイルを利用しています。等高線生成ツールはphyghtmapに置き換え、より解像度の高いSRTM-1を利用できるようにしてみました。
環境
地図の作成にはそこそこのHDD空き容量とマシンパワーが必要です。
今回は以下の環境で構築しました。
ハードウェア
- OS:Windows10(64bit)
- CPU:Core i5
- Memory:16GByte
- HDD:2TByte
ソフトウェア
- Oracle Java 1.8.0_131
- msys2-x86_64-20161025
- mkgmap-r3973
- splitter-r584
- phyghtmap 1.8.0
加えて、本記事では以下のサイトで公開されている地図作成用の設定ファイル/バッチファイルをベースとして使わせて頂きました。これには一連の処理を行うバッチファイルが同梱されています。従って必要なプログラム等をインストールしてしまえば、基本的にはバッチファイルを実行するだけで地図が出来上がるという非常に便利なものです。本記事の環境構築とはつまりこのバッチファイルが動作する環境のことです。
- 小道具展示室
http://tmz.skr.jp/
本記事では本家から若干内容を変更しています。変更した箇所は以下のとおりです。
(わざわざMSYS2を選んだのはPerlやPython等をインストールする手間を減らしたて環境構築を簡単に行いたい、という狙いがあります)
- もともとGnuWin32やActivePerlを使用されていたのをMSYS2(とそのパッケージ類)に置き換え
- 等高線生成にsrtm2osmが使われていたが仕様変更により動作しなくなっていたのでphyghtmapに置き換え
MSYS2をインストール
インストール手順&アップデート
まずMSYS2をインストールします。以下のサイトからダウンロードしてください。基本的にはインストーラの指示通り進めていけば問題ありません。
- MSYS2 homgepage
http://www.msys2.org/
MSYS2のインストールには以下サイトの記事が参考になると思います。
- しっぽのさきっちょ - MSYS2 による gcc 開発環境の構築 ― MSYS2 のインストールから初期化処理まで
http://text.baldanders.info/remark/2016/03/gcc-msys2-1/
インストールが完了したら、MSYS2を起動してパッケージを更新しておきます。
以下のようにコマンドを入力します。
$ pacman -Syu :: パッケージデータベースの同期中... mingw32 343.9 KiB 1194K/s 00:00 [#####################] 100% mingw32.sig 96.0 B 0.00B/s 00:00 [#####################] 100% mingw64 344.0 KiB 2.32M/s 00:00 [#####################] 100% mingw64.sig 96.0 B 0.00B/s 00:00 [#####################] 100% msys 151.4 KiB 73.9M/s 00:00 [#####################] 100% msys.sig 96.0 B 0.00B/s 00:00 [#####################] 100% :: Starting core system upgrade... ... :: インストールを行いますか? [Y/n] (Y or Enterキーを入力) msys2-runtime-2.8.2... 2.4 MiB 1335K/s 00:02 [#####################] 100% bash-4.4.012-1-x86_64 1969.4 KiB 1396K/s 00:01 [#####################] 100% filesystem-2017.05-... 40.0 KiB 39.1M/s 00:00 [#####################] 100% mintty-1~2.7.7-1-x86_64 195.8 KiB 19.1M/s 00:00 [#####################] 100% pacman-5.0.1-3-x86_64 6.0 MiB 1405K/s 00:04 [#####################] 100% ... (5/5) 更新 pacman [#####################] 100% 警告: terminate MSYS2 without returning to shell and check for updates again 警告: for example close your terminal window instead of calling exit
アップデートが完了したら、いったんMSYS2を閉じます。そのあともう一度MSYS2を起動して以下のようにコマンドを入力します。
$ pacman -Suu :: Starting core system upgrade... 何も行うことがありません :: システム全体の更新を開始... 依存関係を解決しています... 衝突するパッケージがないか確認しています... パッケージ (54) bash-completion-2.5-1 bsdcpio-3.3.1-1 bsdtar-3.3.1-1 coreutils-8.26-1 crypt-1.4-1 curl-7.54.0-1 file-5.30-1 ... :: インストールを行いますか? [Y/n] (Y or Enterキーを入力) :: パッケージを取得します... bash-completion-2.5... 188.1 KiB 433K/s 00:00 [#####################] 100% gcc-libs-6.3.0-1-x86_64 819.1 KiB 1410K/s 00:01 [#####################] 100% ...
完了したら、念のためもう一度同じコマンドを実行してアップデータが全て適用されたか確認します。以下のように表示されれば完了です。まだ残っているようであれば同じ手順でアップデートを繰り返します。
$ pacman -Suu :: Starting core system upgrade... 何も行うことがありません :: システム全体の更新を開始... 何も行うことがありません
必要なパッケージをインストール
次に地図作成に必要なパッケージをインストールします。
以下のように入力してください。
$ pacman -S git wget tar gzip perl make mingw-w64-x86_64-python2 mingw-w64-x86_64-python2-setuptools mingw-w64-x86_64-python2-pip mingw-w64-x86_64-python2-numpy mingw-w64-x86_64-python2-matplotlib mingw-w64-x86_64-python2-beautifulsoup3
そこそこ量があるので、少し時間がかかるかもしれません。完了したら次に進みます。
MSYS2の設定ファイルを修正する
次にWindowsの環境変数がMSYS2に引き継がれるように設定変更を行います。以下のファイルをエディタで開いてください。メモ帳で開くと改行が崩れるのでサクラエディタ(http://sakura-editor.sourceforge.net/index.html.ja)等を使ったほうがいいと思います。
- <MSYS2のインストール先フォルダ>\msys2_shell.cmd
設定ファイルの先頭は以下のようになっていると思います。
@echo off setlocal set "WD=%__CD__%" if NOT EXIST "%WD%msys-2.0.dll" set "WD=%~dp0usr\bin\" rem To activate windows native symlinks uncomment next line rem set MSYS=winsymlinks:nativestrict rem Set debugging program for errors rem set MSYS=error_start:%WD%../../mingw64/bin/qtcreator.exe^|-debug^|^<process-id^> rem To export full current PATH from environment into MSYS2 use '-use-full-path' parameter rem or uncomment next line rem set MSYS2_PATH_TYPE=inherit :checkparams rem Help option ...
私の環境では15行目あたりに以下のようにコメントアウトされた行があります。先頭の"rem"を削除して有効にしてください。
- (修正前)rem set MSYS2_PATH_TYPE=inherit
- (修正後)set MSYS2_PATH_TYPE=inherit
これで完了です。ファイルを保存したらMSYS2を再起動してください。
Javaのインストール
まだPCにJavaがインストールされていない場合は、以下のサイトからダウンロードしてインストールしてください。
なお、今回使用するツールは多量のメモリを必要とする場合があるため64bit版Javaを推奨します。
- Oracle Technology Network > Java > Java SE > Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html
インストール方法がよくわからない場合は、以下の記事が参考になるかと思います。
- TECHACADEMY magazine - 初心者でも簡単にできる!Javaをインストールする方法(Windows編)
https://techacademy.jp/magazine/8998
ツール類のダウンロードとインストール
作業フォルダの作成
まず、必要なツール類を格納するフォルダを作成します。場所はどこでもいいですが、地図作成で大容量のファイルが出来るので空き容量に余裕があるドライブの方がいいのと、MSYS2のコマンドラインで操作するのであまり深いパスでない方がいいです。私の環境では以下の場所に作成しました。
- D:\map_tool
ここにツール類を配置していくと以下のようなフォルダ構成になります。
D:\map_tool ├─mkgmap-config ├─kakasi ├─kakasi-dic ├─mkgmap └─splitter
mkgmapとsplitterのインストール
地図作成の心臓部となるツールで、OSM形式ファイルをGarminGPSの地図形式に変換してくれます。
以下のサイトからmkgmapとsplitterをダウンロードしてください。
- mkgmap
http://www.mkgmap.org.uk/
ダウンロードした圧縮ファイルを展開して以下のように配置します。私がインストールした時点ではmkgmapのバージョンはr3973が最新版でしたが、それより新しくなっていると思いますので適時読み替えてください。splitterも同様です。
D:\map_tool ├─mkgmap └─splitter
osmconvertのダウンロード
以下のサイトからosmconvertをダウンロードしてください。64bit環境の方は64bit版を選びます。
- OpenStreetMap Wiki - Osmconvert
http://wiki.openstreetmap.org/wiki/Osmconvert#Windows
以下のフォルダにそのまま実行ファイルを配置します。
- D:\map_tool
64bit版をダウンロードした場合は以下のようにファイル名をリネームしてください。これは後ほどダウンロードするスクリプトにあわせるためです。
- (修正前)osmconvert64.exe
- (修正後)osmconvert.exe
kakasiのダウンロード
漢字表記からローマ字に変換するために使用するプログラムと辞書です。日本語表記の地図を作る場合は必要ありませんが、アルファベット表示しか出来ない機種向けの地図を作るときに必要になります。今回はバッチファイルの中で使用しているのでインストールしておきます。日本語地図が作りたい場合はバッチファイルと設定をカスタマイズすれば可能です。
まずkakasi本体を以下のサイトからダウンロードします。アクセスするとファイル一覧が表示されるので、その先頭にある"kakasi-2.3.4.zip"が目的のものです。
- namazu
http://www.namazu.org/win32/
次に辞書ファイルをダウンロードしてください。以下のサイトから"SKK-JISYO.geo"と"SKK-JISYO.station"のふたつをダウンロードします。
kakasi本体を"kakasi"フォルダ、辞書ファイル(SKK-JISYO.geo, SKK-JISYO.station)を"kakasi-dic"フォルダにそれぞれ配置します。
D:\map_tool ├─kakasi ├─kakasi-dic ├─mkgmap └─splitter
7zipのインストール(option)
スクリプトでは出来上がった地図ファイルを最後に圧縮するために使用しています。無くても問題なく動作するので不要な方は飛ばしてください。
以下のサイトからダウンロードします。
- 7-Zip
http://www.7-zip.org/
StandAlone版をダウンロードした場合は作業フォルダの下にサブフォルダを作成して配置すればよいかと思います。インストーラ版をダウンロードした場合はデフォルト設定で問題ないと思います。
phyghtmapのインストール
地図の等高線を生成するためのツールです。等高線入り地図を作りたい場合はインストールしてください。
以下のサイトからダウンロード出来ます。
- phyghtmap
http://katze.tfiu.de/projects/phyghtmap/
MSYS2のコンソールから以下のようにしてダウンロード/インストールします。
$ wget http://katze.tfiu.de/projects/phyghtmap/phyghtmap_1.80.orig.tar.gz $ tar zxvf phyghtmap_1.80.orig.tar.gz $ cd phyghtmap-1.80 $ python setup.py install
インストールが完了したら以下のようにコマンド入力して動作することを確認します。
$ phyghtmap --version phyghtmap 1.80
地図作成用バッチファイル/設定ファイルのダウンロード
一連の処理を行うバッチファイルと設定ファイルをダウンロードします。これは小道具展示室さんで公開されている設定ファイルを使用させて頂きました。これをベースにカスタマイズすれば手軽に自作地図が作れます。
本記事ではMSYS2向けに修正したものを用意しましたので、以下のようにしてgitで取得してください。
$ cd /d/map_tool/ $ git clone https://github.com/suke-blog/mkgmap-config.git
これでmkgmap-configディレクトリが作成され、中にバッチファイルと設定ファイルが配置されたかと思います。
地図作成
等高線の生成
地図に等高線など不要、という方は飛ばしてください。
等高線は以下のシェルスクリプトを実行することで生成されます。ただ、そのために必要なデータを取得するために事前にアカウント情報を設定する必要があります。
- mkgmap-config\contour\make_contour_japan.sh
以下のような手順で作業します。
- Earthdataのユーザアカウントを作成(デジタル標高モデルのダウンロードに必要)
- "make_contour_japan.sh"の環境変数を修正
- MSYS2で"make_contour_japan.sh"を実行
(1)Earthdataアカウントの作成
等高線の生成にはNASAが公開しているデジタル標高モデル(SRTM)を利用します。本記事で使用するphyghtmapはSRTMを自動的にダウンロードして等高線生成まで行ってくれますが、ダウンロードにはEarthdataにログインするためのIDとパスワードが必要です(何年か前まではアカウント無しでいけたようなのですが、変更されたようです)。以下のURLからアカウントを登録してください。
- NASA EARTHDATA - Register for an Earthdata Login Profile
https://urs.earthdata.nasa.gov/users/new
(2)make_contour_japan.shの環境変数を修正
次にスクリプトの環境変数を修正します。
エディタで"make_contour_japan.sh"を開くと以下のようになっています。
#!/bin/bash # generate contour script # 2017-09-04 PHYGHTMAP_PATH="phyghtmap" JOBS=2 # ---<contor config>------------------- # SRTM resolution. possible value is 1 or 3. 1:SRTM-1,3:SRTM-3. SRTM=1 # specify contour line step size in meters. CONTOUR_STEP=10 # pecify a string of two comma seperated integers for major and medium elevation categories. CONTOUR_LINE_CAT=500,50 # ---<Earthdata Account>--------------- # username and password for earchdata login. EARTHDATA_USER= EARTHDATA_PASSWORD= echo "generate contor script" echo "<<Press hit any key to continue...>>" read Wait $PHYGHTMAP_PATH --pbf --polygon=japan.poly --output-prefix=japan_srtm --srtm=$SRTM --step=$CONTOUR_STEP --line-cat=$CONTOUR_LINE_CAT --start-node-id=20000000000 --start-way-id=10000000000 --write-timestamp --no-zero-contour --earthdata-user=$EARTHDATA_USER --earthdata-password=$EARTHDATA_PASSWORD --corrx=0.0005 --corry=0.0005 --jobs=$JOBS echo "Complete."
まず、先ほど作成したEarthdataのIDとパスワードを環境変数に設定します(これが設定されていないと処理が止まります)。
- EARTHDATA_USER=user_id
- EARTHDATA_PASSWORD=password
次に作成する等高線のパラメータをお好みで変更します。
"SRTM"はSRTM-1,SRTM-3のどちらを使用するかを指定します。それぞれ解像度が異なっていてSRTM-1が30mメッシュ、SRTM-3が90mメッシュになります。SRTM-1の方が解像度が高いのでより現実に即した等高線が出来ますが地図のファイルサイズが大きくなります。
- SRTM=1
"CONTOUR_STEP"は何メートル間隔で等高線を引くか、"CONTOUR_LINE_CAT"は等高線を見やすくするために何メートル間隔で太くするかを指定します。以下の設定だと10m間隔で等高線を作成し、そのうち50m間隔のものを中線、500m間隔のものを太線とします。
- CONTOUR_STEP=10
- CONTOUR_LINE_CAT=500,50
また、ファイル先頭にある"JOBS"はスレッドの数です。CPUのコア数に合わせて修正してください。
- JOBS=2
最初はIDとパスワードだけ設定して取り合えず作ってみて、気に入らない場合はカスタマイズすればよいかと思います。
保存したら次に進みます。
(3)"make_contour_japan.sh"を実行する
あとはシェルスクリプトを実行するだけ等高線が生成されます。そこそこ時間がかかるかと思うので終了するまで気長に待ってください。
$ cd ./contour $ make_contour_japan.sh
完了したらフォルダの中に"japan_srtm_lonxxx.xx_xxx.xxlatyy.yy_yy.yy_srtm1v3.0.osm.pbf"といったファイルがずらずらと生成されていることを確認してください。これが等高線になります。このファイルを残しておけば後日に地図を更新するときに再利用することが出来ます。
等高線の間隔や使用するSRTM等の設定を変更したい場合は、いったんフォルダにある拡張子が".osm.pbf"のファイルを全て削除してからシェルスクリプトを再実行してください。
自作地図の作成
地図作成用のバッチファイル(gmapsupp_make.bat)を実行するだけです。バッチファイルの処理内容は以下のようになります。
- Geofabrikから日本の地図(OpenStreetMapから切り出したもの)を取得
- 地図を適当なサイズのタイルに分割
- 地図の日本語表記をローマ字に変換
- Garmin.imgを作成
変則的ですが、MSYS2から以下のようにしてバッチファイルを実行してください。
$ cd /d/map_tool/mkgmap-config $ cmd /c gmasupp_make.bat Hit any key to continue... # 適当にEnterキー等を押すと開始
生成物は"output"フォルダに出力されます。そこそこ時間がかかるので完了まで気長に待ってください(特に初回はOpenStreetMapのデータを取得するため時間がかかります)。寝る前に実行すれば朝方には終わっているかと思います。
あとは地図は出来上がった"gmapsupp.img"をGPSのSDカードに転送して実機で確認するか、"Garmin BaseCamp"や以下のツールを使用するなどして内容を確認してください。
- QLandKarte GT
http://www.qlandkarte.org/
所感
あまり需要は無いかもしれませんが、MSYS2を使ってのGarmin地図自作環境についてです。
元々、この環境作りは国土基盤情報の高解像度なデジタル標高モデルを使って山登りに使える地図を作ることが目的でした。しかし、とある事情(pythonのGDALモジュールがインストールできなくてGeoTIFFが扱えなかった)により頓挫してしまい、Linuxを使った環境構築に移行した為にMSYS2環境は埃をかぶっていました。しかし、わざわざ仮想PC等を使ってLinuxを準備しなくてもWindows上で地図を作れるということは米粒程度には価値があるかもしれません。そこで以前に書きなぐったメモを整理して本記事を書き上げることにしました。
MSYS2上でバッチファイルを動作させるというヘンテコなことをしているせいで上手く動作するまで少し迷ったところはありますが、基本的に処理内容は小道具展示室さんが公開している設定ファイルとバッチファイルそのまんまです。ただ、等高線生成部分については本家からツールを置き換えています。より高解像度なSRTM-1が使用可能になったので等高線の精度に不満があった方はぜひ試してみてください(本文中にある富士山近傍の地形図が参考になります)。
それと、ここでは取り上げていませんがmkgmapのstyleを編集すれば各道路の幅や色、オリジナルアイコンの追加などでさらに自分好みの地図にカスタマイズすることが出来ます。こちらも興味のある方はぜひ挑戦してみてください。
参考
本記事は以下の内容を参考に記載させて頂きました。
- 小道具展示室
http://tmz.skr.jp/ - phyghtmap
http://katze.tfiu.de/projects/phyghtmap/ - mkgmap
http://www.mkgmap.org.uk/ - しっぽのさきっちょ - MSYS2 による gcc 開発環境の構築 ― MSYS2 のインストールから初期化処理まで
http://text.baldanders.info/remark/2016/03/gcc-msys2-1/ - めもらんだむ - MSYS2 で PATH が引き継がれない
http://chirimenmonster.github.io/2016/05/09/msys2-path.html - ねこゆきのメモ - msys2, pacman, pacmanの使い方。
http://nekoyukimmm.hatenablog.com/entry/2015/04/04/214219