コンテンツへスキップ

[地図自作] GarminGPS地図の自作環境構築(MSYS2編)

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

加えて、本記事では以下のサイトで公開されている地図作成用の設定ファイル/バッチファイルをベースとして使わせて頂きました。これには一連の処理を行うバッチファイルが同梱されています。従って必要なプログラム等をインストールしてしまえば、基本的にはバッチファイルを実行するだけで地図が出来上がるという非常に便利なものです。本記事の環境構築とはつまりこのバッチファイルが動作する環境のことです。

本記事では本家から若干内容を変更しています。変更した箇所は以下のとおりです。
(わざわざMSYS2を選んだのはPerlやPython等をインストールする手間を減らしたて環境構築を簡単に行いたい、という狙いがあります)

  • もともとGnuWin32やActivePerlを使用されていたのをMSYS2(とそのパッケージ類)に置き換え
  • 等高線生成にsrtm2osmが使われていたが仕様変更により動作しなくなっていたのでphyghtmapに置き換え
msys2_mkgmap.png
MSYS2はWindows上でLinuxコマンドが使えるコンソール環境です。pythonやperlがパッケージ管理ツールでインストール出来るのが魅力です。

 

MSYS2をインストール

インストール手順&アップデート

まずMSYS2をインストールします。以下のサイトからダウンロードしてください。基本的にはインストーラの指示通り進めていけば問題ありません。

MSYS2のインストールには以下サイトの記事が参考になると思います。

インストールが完了したら、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^|^&lt;process-id^&gt;

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を推奨します。

インストール方法がよくわからない場合は、以下の記事が参考になるかと思います。

 

ツール類のダウンロードとインストール

作業フォルダの作成

まず、必要なツール類を格納するフォルダを作成します。場所はどこでもいいですが、地図作成で大容量のファイルが出来るので空き容量に余裕があるドライブの方がいいのと、MSYS2のコマンドラインで操作するのであまり深いパスでない方がいいです。私の環境では以下の場所に作成しました。

  • D:\map_tool

ここにツール類を配置していくと以下のようなフォルダ構成になります。


D:\map_tool
├─mkgmap-config
├─kakasi
├─kakasi-dic
├─mkgmap
└─splitter

 

mkgmapとsplitterのインストール

地図作成の心臓部となるツールで、OSM形式ファイルをGarminGPSの地図形式に変換してくれます。
以下のサイトからmkgmapとsplitterをダウンロードしてください。

ダウンロードした圧縮ファイルを展開して以下のように配置します。私がインストールした時点ではmkgmapのバージョンはr3973が最新版でしたが、それより新しくなっていると思いますので適時読み替えてください。splitterも同様です。


D:\map_tool
├─mkgmap
└─splitter

 

osmconvertのダウンロード

以下のサイトからosmconvertをダウンロードしてください。64bit環境の方は64bit版を選びます。

以下のフォルダにそのまま実行ファイルを配置します。

  • D:\map_tool

64bit版をダウンロードした場合は以下のようにファイル名をリネームしてください。これは後ほどダウンロードするスクリプトにあわせるためです。

  • (修正前)osmconvert64.exe
  • (修正後)osmconvert.exe

 

kakasiのダウンロード

漢字表記からローマ字に変換するために使用するプログラムと辞書です。日本語表記の地図を作る場合は必要ありませんが、アルファベット表示しか出来ない機種向けの地図を作るときに必要になります。今回はバッチファイルの中で使用しているのでインストールしておきます。日本語地図が作りたい場合はバッチファイルと設定をカスタマイズすれば可能です。

まずkakasi本体を以下のサイトからダウンロードします。アクセスするとファイル一覧が表示されるので、その先頭にある"kakasi-2.3.4.zip"が目的のものです。

次に辞書ファイルをダウンロードしてください。以下のサイトから"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)

スクリプトでは出来上がった地図ファイルを最後に圧縮するために使用しています。無くても問題なく動作するので不要な方は飛ばしてください。
以下のサイトからダウンロードします。

StandAlone版をダウンロードした場合は作業フォルダの下にサブフォルダを作成して配置すればよいかと思います。インストーラ版をダウンロードした場合はデフォルト設定で問題ないと思います。

 

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

以下のような手順で作業します。

  1. Earthdataのユーザアカウントを作成(デジタル標高モデルのダウンロードに必要)
  2. "make_contour_japan.sh"の環境変数を修正
  3. MSYS2で"make_contour_japan.sh"を実行

 

(1)Earthdataアカウントの作成

等高線の生成にはNASAが公開しているデジタル標高モデル(SRTM)を利用します。本記事で使用するphyghtmapはSRTMを自動的にダウンロードして等高線生成まで行ってくれますが、ダウンロードにはEarthdataにログインするためのIDとパスワードが必要です(何年か前まではアカウント無しでいけたようなのですが、変更されたようです)。以下のURLからアカウントを登録してください。

nasa_earthdata_register_page.png
SRTMのダウンロードにはアカウントが必要です

 

(2)make_contour_japan.shの環境変数を修正

次にスクリプトの環境変数を修正します。
エディタで"make_contour_japan.sh"を開くと以下のようになっています。

#!/bin/bash
# generate contour script
# 2017-09-04

PHYGHTMAP_PATH="phyghtmap"
JOBS=2

# ---&lt;contor config&gt;-------------------
# 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

# ---&lt;Earthdata Account&gt;---------------
# username and password for earchdata login.
EARTHDATA_USER=
EARTHDATA_PASSWORD=


echo "generate contor script"
echo "&lt;&lt;Press hit any key to continue...&gt;&gt;"
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とパスワードだけ設定して取り合えず作ってみて、気に入らない場合はカスタマイズすればよいかと思います。
保存したら次に進みます。

garmin_oregon400t_scrn_tmzcustom_strm3_step10m_mtfuji_200m.png
SRTM-3を使って生成した等高線(富士山付近)

garmin_oregon400t_scrn_tmzmap_strm1_mtfuji_200m.png
SRTM-1を使って生成した等高線(富士山付近)

 

(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)を実行するだけです。バッチファイルの処理内容は以下のようになります。

  1. Geofabrikから日本の地図(OpenStreetMapから切り出したもの)を取得
  2. 地図を適当なサイズのタイルに分割
  3. 地図の日本語表記をローマ字に変換
  4. 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"や以下のツールを使用するなどして内容を確認してください。

 

所感

あまり需要は無いかもしれませんが、MSYS2を使ってのGarmin地図自作環境についてです。

元々、この環境作りは国土基盤情報の高解像度なデジタル標高モデルを使って山登りに使える地図を作ることが目的でした。しかし、とある事情(pythonのGDALモジュールがインストールできなくてGeoTIFFが扱えなかった)により頓挫してしまい、Linuxを使った環境構築に移行した為にMSYS2環境は埃をかぶっていました。しかし、わざわざ仮想PC等を使ってLinuxを準備しなくてもWindows上で地図を作れるということは米粒程度には価値があるかもしれません。そこで以前に書きなぐったメモを整理して本記事を書き上げることにしました。

MSYS2上でバッチファイルを動作させるというヘンテコなことをしているせいで上手く動作するまで少し迷ったところはありますが、基本的に処理内容は小道具展示室さんが公開している設定ファイルとバッチファイルそのまんまです。ただ、等高線生成部分については本家からツールを置き換えています。より高解像度なSRTM-1が使用可能になったので等高線の精度に不満があった方はぜひ試してみてください(本文中にある富士山近傍の地形図が参考になります)。

それと、ここでは取り上げていませんがmkgmapのstyleを編集すれば各道路の幅や色、オリジナルアイコンの追加などでさらに自分好みの地図にカスタマイズすることが出来ます。こちらも興味のある方はぜひ挑戦してみてください。

 

参考

本記事は以下の内容を参考に記載させて頂きました。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください