先日書いた『eTrex 30xに日本語OSMをインストールする』という記事では、いったんファームウェアをダウングレードしてから日本語OSMを認証させ、もう一度アップグレードするという方法でインストールすることに成功しました。
上記の方法では一度地図を認証させれば、その後は地図を更新してもファームウェアをダウングレードする必要はないものと認識していました。ところがそうではなかったようです。新しい地図がアップされていたので更新したところ、再び認証されなくなってしまいました。どうもファイルサイズが変わったりするとダメみたいなんですね。ということは地図を更新するたびにダウングレード→アップグレードを繰り返さなければならないということです。
僕はOSMの編集に手を出しているので、常に自分の修正が入った最新の地図を使いたいのです。地図はだいたい2週間に一度くらい更新されてますが、さすがにこんな面倒なことはいちいちやってられないですね。しかもファームウェアを書き換えると設定がリセットされたりして厄介なことになります。そこで日本語OSMを認証させるためのもう一つの方法を試してみました。
もう一つの方法とは?
最新のeTrex 30x等で日本語OSMが認証されない問題は、文字コードがUTF-8の場合だけに発生することがわかっています。つまり文字コードが日本語版Garminで使われているシフトJISやローマ字表記のASCIIであれば問題なく認証されるのです。
この性質に着目し、一時的に文字コードをシフトJISに置き換えたダミーファイルを用意して地図を認証させ、その後に本来のUTF-8版の地図にすり替えるという方法が考案されています。この方法であればファームウェアには一切手を加えずに地図を認証させることができるので安全でもあります。
具体的な方法はこちらのサイトで解説されていますが、たぶんこれだけでは普通の人には理解できないです。というか自分もハマりました。そこでこの方法について手順を詳しく解説してみます。
用意するもの
この方法ではimgファイルを直接書き換えるため、バイナリエディタが必要です。バイナリエディタとはファイルの中身をバイト単位で操作するためのソフトです。バイナリエディタもフリーソフトでいろいろ出回っていますが、「バイト列の置換」ができるものはそんなにありません。修正する箇所が非常に多いため一つずつ手作業で修正するのは不可能で、一括置換する必要があるからです。
この機能を持った高機能なバイナリエディタとして、Stirling(スターリング)というソフトを使います。Vectorのサイトからダウンロードして下さい。古いソフトで現在は開発が止まっているようですが、プログラマの間では非常に評価の高いソフトです。LZHを解凍するだけなので、インストールする必要はありません。
作業手順
1. gmapsupp.imgファイルを複製
OpenStreetMap for GARMINからダウンロードしたUTF-8版のzipを解凍し、取り出したgmapsupp.imgファイルをgmapsupp.orgとリネームします。これを後に本番の地図として使います。
次にgmapsupp.orgファイルを複製して、gmapsupp.imgにリネームします。これは一時的に認証させるためのダミーファイルとして使います。
2. Stirlingでバイト列を書き換える
Stirlingを起動して、gmapsupp.img(複製した方)を読み込みます。
メインメニューから「検索・移動→置換」を選択します。
置換ダイアログで下記の通り設定します。
検索データ→E9 FD 13 00 04 80
置換データ→A4 03 13 00 04 80
置換範囲→データ全体
設定が終わったら「一括置換」ボタンを押します。全部で307ヶ所ありました。少し時間がかかります。
ここで何をやっているかと言いますと、UTF-8のコードページ65001(0xFDE9)をShift-JISのコードページ932(0x03A4)に置き換えたわけです。先頭の2バイトがそうです。
最初は1ヶ所だけと思っていたので、手作業で書き換えたらうまく行きませんでした。修正箇所が大量にあるため、とても手作業ではできません。だから一括置換が可能なバイナリエディタが必要なのです。
一括置換が終わったらメインメニューから「ファイル→上書き保存」を選択します。
これでコードページをShift-JISに書き換えたgmapsupp.imgファイルが出来上がりました。
3. 2つのimgファイルをmicroSDにコピー
元のgmapsupp.orgファイルと、上記で書き換えたgmapsupp.imgファイルを一緒にmicroSDのgarminフォルダにコピーします。
4. ダミーファイルを認証
上記で作成したmicroSDをGPS本体に挿入し、電源を投入します。うまく行けばエラーメッセージが出ることなく地図が認証されるはずです。
ここで表示される地図はもともとUTF-8ですが、コードページをShift-JISに偽装しているため文字は表示されません。
5. 本番の地図にすり替える
一度認証が通ればダミーファイルはもう必要ありません。gmapsupp.imgファイルを削除して、バックアップしておいたgmapsupp.orgファイルをgmapsupp.imgにリネームします。
その後もう一度電源を入れ直すと、今度は日本語文字が表示されるようになります。
まとめ
この方法ではバイナリエディタで書き換えるのが多少面倒ではありますが、結果的にファームウェアをダウングレードするより早いと思います。失敗しても本体には影響が及ばないので危険の少ない方法でもあります。どっちみち地図を更新するとやり直す必要があるのなら、最初からこちらを選ぶべきでした。ただ毎回やるのはやっぱり面倒なので、自動化ツールを開発する予定です。
なおGarmin GPS英語版用 日本地図データで配布しているようなローマ字表記のOSMは何の細工もせずにそのままeTrex 30xで使えます。面倒なことが嫌いな方、自信のない方はこちらの使用がおすすめです。作者は別なので、それぞれに特長があります。ローマ字表記だと確かにパッと見て認識しづらいし、読み方の間違いも多いのですが、日本語の細かい文字より視認性が良いというメリットもあります。またコンビニのアイコンが会社別に分かれていたり独自のカスタマイズもあるので、これはこれで便利なところもあります。