MPT.BINの座標のズレ
ズレの原因がわかったかも。
マップコードとマピオンは日本測地系ベースだが、このカーナビはWGS84ベースだからのようだ。
以下、マップコード公式サイトに載ってた東京都庁を例に検証。
例えば、東京都庁を指定する場合は、
http://guide2.e-mapcode.com/tech/tech_exp01.html
東経 139度 41分 42.10秒
北緯 35度 41分 10.70秒
* (日本測地系)
マップコードの例(東京都庁)
668312
後で比較しやすくするために60進数を10進数に変換
35 + 41/60 + 10.70/3600 = 35.68630556
139 + 41/60 + 42.10/3600 = 139.6950278
念のために確認。確かに東京都庁はこの位置であってる。
http://www.mapion.co.jp/c/f?uc=1&grp=all&nl=35.68630556&el=139.6950278
カーナビにマップコード668312を登録
MPT.BINでの座標情報部分を見ると 47 61 05 63 62 42
上位3バイトの0x476105は10進数で4677893
24bit中の上位7bitを度単位に、残りの下位17bitを小数点以下にするために、17bit右シフトする
よって、緯度は 4677893 / 2^17 = 35.68949127
下位3バイトの0x636242は10進数で6513218
経度方向は17bitシフト後、オフセット90度を加える
よって、経度は 6513218 / 2^17 + 90 = 139.6919098
マピオンで確認してみる。が、誤差ですむレベルじゃない。
http://www.mapion.co.jp/c/f?uc=1&grp=all&nl=35.68949127&el=139.6919098
経緯度の数字は国毎で基準が少しずつ違っていて、同じ数字でも同じ場所を指すとは限らなかったりします。この基準のことを測地系(Datum)と言います。日本では日本測地系(Tokyo)が、GPSの世界ではWGS 84測地系が多く使われています。
http://homepage3.nifty.com/Nowral/02_DATUM/02_DATUM.html
googleマップはWGS84ベースのようなので以下のサイトで実験
経度・緯度の指定によるGoogle Earth/Google Maps/地図の起動
http://google-earth-travel.net/maps/
MPT.BIN側の以下の座標を入力するとちゃんと東京都庁を指し示す
35.68949127,139.6919098
当然ながら以下の日本測地系の方の座標を与えると逆方向にずれる。
35.68630556,139.6950278
三角関数を使わない変換式(簡単):
http://homepage3.nifty.com/Nowral/02_DATUM/02_DATUM.html
緯度Bと経度Lの数値は、度単位(D)で与えてください。
BWGS84 = BTokyo - 0.00010695*BTokyo + 0.000017464*LTokyo + 0.0046017
LWGS84 = LTokyo - 0.000046038*BTokyo - 0.000083043*LTokyo + 0.010040
BTokyo = BWGS84 + 0.00010696*BWGS84 - 0.000017467*LWGS84 - 0.0046020
LTokyo = LWGS84 + 0.000046047*BWGS84 + 0.000083049*LWGS84 - 0.010041
この簡易変換式も試してみる。
BTokyo = 35.68949127 + 0.00010696*35.68949127 - 0.000017467*139.6919098 - 0.0046020 = 35.68626662
LTokyo = 139.6919098 + 0.000046047*35.68949127 + 0.000083049*139.6919098 - 0.010041 = 139.6951135
http://www.mapion.co.jp/c/f?uc=1&grp=all&nl=35.68626662&el=139.6951135
うん、いい感じ