MPT.BINの座標のズレ

ズレの原因がわかったかも。
マップコードとマピオン日本測地系ベースだが、このカーナビはWGS84ベースだからのようだ。

以下、マップコード公式サイトに載ってた東京都庁を例に検証。

例えば、東京都庁を指定する場合は、
 東経 139度 41分 42.10秒
 北緯 35度 41分 10.70秒
  * (日本測地系)
マップコードの例(東京都庁
  668312

http://guide2.e-mapcode.com/tech/tech_exp01.html

後で比較しやすくするために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

三角関数を使わない変換式(簡単):
緯度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 

http://homepage3.nifty.com/Nowral/02_DATUM/02_DATUM.html

この簡易変換式も試してみる。
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
うん、いい感じ