au携帯のGPSデータを変換するApplescript

奇特な方からのご好意でauGPS機能付き携帯電話 A5406CA が入手できたので、GPSで遊んでみました。
携帯のGPS機能で測地したGPSデータで地図を開くことが出来て便利ですが、携帯で地図をいじっているとパケット代が気になります。
そこで、携帯からGPSデータをメールで送ってみたら、次のようなURLデータになります。
http://rcs-ez.mti.ne.jp/casio/ShowMap.asp?datum=0&unit=0&lat=+39.47.57.90&lon=+141.08.22.77&fm=0
このURLを表示させると、携帯電話用なので、小さな画面が出ますが、縮尺を変えられないので、良く分かりませんね。
そこで、このデータから緯度経度をそのまま mapfan に
http://www.mapfan.com/index.cgi?&ZM=12&MS=1&MAP=E141.8.22.77N39.47.57.90
のようにして表示させると、ずれて表示されます。
これはGPSのデータがこの携帯ではWGS84系なのに対して、mapfanがTOKYO系を使っていることに起因しています。
このWGS84系の緯度経度情報をTOKYO系に変換する方法をネットで調べると、厳密にするのは面倒だけど、1秒程度の誤差を容認できるなら簡便に変換できることがわかりました。
そこで、au携帯からメールで送られたURLデータから、緯度経度の部分を抜き出して、TOKYO系に変換してmapfan で表示させるAppleScriptを制作しました。(文末に転載)
クリップボードからデータを読み出すので、URLデータをコピーしてから実行してみてください。
ちなみに上記のデータを変換したmapfan用のURLは次のようになります。
http://www.mapfan.com/index.cgi?&ZM=12&MS=1&MAP=E141.8.35.41N39.47.47.78
これだと、ズームができるので、使えますね。

AppleScript のソース

set ans to the clipboard as text
try
    set wk to characters (offset of "+" in ans) thru (the length of ans) of ans as string
    set nData to characters 2 thru ((offset of "&" in wk) - 1) of wk as string
on error
    display dialog "Bad data in Clipboard"
    return
end try
try
    set wk2 to characters (offset of "&" in wk) thru (the length of wk) of wk as string
    set wk to characters (offset of "+" in wk2) thru (the length of wk2) of wk2 as string
    set eData to characters 2 thru ((offset of "&" in wk) - 1) of wk as string
on error
    display dialog "Bad data in Clipboard"
    return
end try

set nData_deg to deg_conv(nData)
set eData_deg to deg_conv(eData)
set nDeg to nData_deg + 1.0696E-4 * nData_deg - 1.7467E-5 * eData_deg - 0.004602
set eDeg to eData_deg + 4.6047E-5 * nData_deg + 8.3049E-5 * eData_deg - 0.010041
set nData to ch_conv(nDeg)
set eData to ch_conv(eDeg)

set cmd to "http://www.mapfan.com/index.cgi?&ZM=12&MS=1&MAP=E" & eData & "N" & nData
open location cmd

on deg_conv(inData)
    set wk to inData as string
    set dlm to AppleScript's text item delimiters
    set AppleScript's text item delimiters to "."
    set d1 to text item 1 of wk
    set d2 to text item 2 of wk
    set d3 to text item 3 of wk
    set D4 to text item 4 of wk
    set AppleScript's text item delimiters to dlm
   set ans to d1 + d2 / 60 + (d3 + D4 / 100) / 3600
    return ans
end deg_conv

on ch_conv(inData)
    set wk to inData
    set d1 to wk div 1
    set wk to (wk mod 1) * 60
    set d2 to wk div 1
    set wk to (wk mod 1) * 60
    set d3 to ((wk * 100) div 1) / 100
    set ans to (d1 as text) & "." & (d2 as text) & "." & d3 as text
    return ans
end ch_conv