Google Static Maps APIで地図表示させるための準備 その2
緯度経度の変換
ケータイで取得できる緯度経度は、度分秒の形式(60進法)なので、Google Static Maps API(v2)で扱える10進法に変換する必要がある。
値の取得
まずは取得した座標を「.」で分割して、配列に入れる。
配列に入れる理由は、その方が扱いやすい…と思ったから。
例えば、こう。
$lat_array = explode(".", $_GET['lat']);
一応、$_GETの値はチェックする方がいいと思うけど、とりあえずはこういうことで。
※SoftBankとWILLCOMは「N**.**.**.***E***.**.**.***」とかって書式だから、別の方法で緯度と経度で分割しておくことが必要。
値の変換
二箇所のサイトを参考にさせていただきました。
lat=35.43.22.18 を百分率表記(Google Maps 等で良く利用される)に変換するには以下の計算式を使います。
http://adgjm.net/saas/gps.htm
( 35*3600000 + 43*60000 + 22*1000 + 18 ) / 3600000
こうかな?
($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
02 DATUM
LWGS84 = LTokyo - 0.000046038*BTokyo - 0.000083043*LTokyo + 0.010040
これは日本測地系からの変換。逆の必要はないので、これだけお借りします。
度単位ってことなので、前に書いた方法で変換した上で、この式に当てはめれば多分OK。
ただ、今のテスト環境だと、補正結果を確認できないのがなぁ。
とにかく、これで準備完了だ。
あとは受け取った緯度経度を使って地図を表示させるだけだけど、それはまた次のエントリで。