Google Static Maps APIで地図表示させるための準備 その2

緯度経度の変換

ケータイで取得できる緯度経度は、度分秒の形式(60進法)なので、Google Static Maps API(v2)で扱える10進法に変換する必要がある。

値の取得

まずは取得した座標を「.」で分割して、配列に入れる。
配列に入れる理由は、その方が扱いやすい…と思ったから。

例えば、こう。

$lat_array = explode(".", $_GET['lat']);

一応、$_GETの値はチェックする方がいいと思うけど、とりあえずはこういうことで。
SoftBankWILLCOMは「N**.**.**.***E***.**.**.***」とかって書式だから、別の方法で緯度と経度で分割しておくことが必要。

値の変換

二箇所のサイトを参考にさせていただきました。

lat=35.43.22.18 を百分率表記(Google Maps 等で良く利用される)に変換するには以下の計算式を使います。
( 35*3600000 + 43*60000 + 22*1000 + 18 ) / 3600000

http://adgjm.net/saas/gps.htm

こうかな?

($array[0] * 3600000 + $array[1] * 60000 + $array[2] * 1000 + $array[3]) / 3600000;

139°45′35.187″

= 139 + (45 / 60) + (35.187 / 60 / 60)

= 139.759774167

経度・緯度を60進法から10進法へ変換 - F.Ko-Jiの「一秒後は未来」

こっちは後半のふたつが一つの数値になってるね。
こんなふうかな?

($array[0] + ($array[1] / 60) + ($array[2] + ($array[3] / 1000)) / 60 / 60)

書いてて気が付いたんだけど、今のままだと数字の前に符号がついたままだな。
日本国内なら全てプラスになるから問題ないけど、マイナス符号がつく場合、このまま計算するとやっかいだ。
最初に受け取った時点でプラスマイナスを判断して、どっかにフラグでも持つか?
また後で考えよう。

測地系による補正

あと測地系日本測地系の場合は、補正をしてやりたい。
厳密に位置を特定して何かをするワケではないが(検索場所を決めるためのおおまかな処理だから)、やはりtokyoという値を受け取ったら補正をかけたくなるでしょ?
ってことで、あれこれ検索した結果、これが一番簡単そう(多少の誤差は気にしない)。

三角関数を使わない変換式(簡単):

もう少し沢山の点を変換する必要があるが、メモリも計算能力も限られていると言う向きに、以下のような変換式を作りました。緯度Bと経度Lの数値は、度単位(D)で与えてください。

BWGS84 = BTokyo - 0.00010695*BTokyo + 0.000017464*LTokyo + 0.0046017
LWGS84 = LTokyo - 0.000046038*BTokyo - 0.000083043*LTokyo + 0.010040

02 DATUM

これは日本測地系からの変換。逆の必要はないので、これだけお借りします。

度単位ってことなので、前に書いた方法で変換した上で、この式に当てはめれば多分OK。
ただ、今のテスト環境だと、補正結果を確認できないのがなぁ。

とにかく、これで準備完了だ。
あとは受け取った緯度経度を使って地図を表示させるだけだけど、それはまた次のエントリで。