ケータイで取得した位置情報をGoogleMap形式に変換するサンプル
Tweet
ケータイで位置情報(緯度・経度)を取得すると、度分秒表記(xx時xx分xx秒形式)で座標が返ってくるケースがほとんどです。
しかし、GoogleMapなどの地図サービスはミリ秒表記(xxx.xxxxxx形式)を使っていることが多いので、変換が必要になります。
今回は座標をGoogleMapで使えることを目的として、度分秒形式からミリ秒形式へ変換するPHPのサンプルをご紹介します。
ケータイ(度分秒形式)→GoogleMap(ミリ秒形式)への変換サンプル
// GPSで取得した座標の例
$ido = '+43.3.14.112';
$keido = '+141.22.35.364';
// 度分秒形式からGoogleMapに対応したミリ秒形式に変換する
list($g_ido, $g_keido) = convertLocationForGMap($ido, $keido);
echo '緯度=' . $g_ido . '<br>';
echo '経度=' . $g_keido . '<br>';
/**
* 緯度・経度変換メソッド
* 緯度・経度を度分秒形式からミリ秒形式に変換する
* @param string $ido 緯度(度分秒形式)
* @param string $keido 経度(度分秒形式)
* @return array array([変換後の緯度], [変換後の経度])
*/
function convertLocationForGMap($ido, $keido) {
// 度分秒形式からGoogleMapに対応した形式に変換する
$keido_arr = explode('.', $keido);
$ido_arr = explode('.', $ido);
$g_keido = trim($keido_arr[0]) + trim($keido_arr[1]) / 60
+ (trim($keido_arr[2]) + trim($keido_arr[3]) / 1000) / 3600;
$g_ido = trim($ido_arr[0]) + trim($ido_arr[1]) / 60
+ (trim($ido_arr[2]) + trim($ido_arr[3]) / 1000) / 3600;
return array($g_ido, $g_keido);
}
trimをかけているのは、端末やサービスの違いによっては、座標の間にスペースが入ることがあるためです。
なお、利用するキャリアやサービスによっては、取得する座標が日本測地系で取れてしまうことがあります。
GoogleMapは世界測地系ですので、座標データが日本測地系の場合は変換が必要になります。
このあたりの説明と変換サンプルは、また後日ご紹介したいと思います。
※追記
日本測地系→世界測地系の記事を作成しました。こちらです。
関連:
4月 21st, 2008 at 11:00:10
その変換式はここがたぶんオリジナル
http://jsgt.org/ajax/newmon/GoogleMapsAPIv2.htm#GLatLng_tky
4月 21st, 2008 at 11:02:35
すみません。書くページ間違えました