ケータイで取得した位置情報を世界測地系に変換するサンプル
Tweet
先日ご紹介した「ケータイで取得した位置情報をGoogleMap形式に変換するサンプル」に引き続き、GPSの座標変換系の話です。
ケータイから取得できる座標には日本測地系と世界測地系とがあります。
ドコモの場合、iモードのGPS機能、オープンiエリアともに世界測地系になるようです。
auやソフトバンクは、パラメータで取得する形式を指定できるようです。
なおウィルコムは日本測地系で座標を返すようです。
GoogleMapは世界測地系を利用しているため、日本測地系の座標の場合は変換の必要があります。
変換用のサンプルプログラムは次の通りです。
日本測地系(度分秒形式)→世界測地系(ミリ秒形式)の変換サンプル
// 取得した座標(日本測地系)
$ido = '+43. 2. 58. 956';
$keido = '+141. 22. 36. 912';
// 度分秒形式からGoogleMapに対応したミリ秒形式に変換する
list($g_ido, $g_keido) = convertLocationForGMap($ido, $keido);
// 世界測地系に変換する
list($wgs_ido, $wgs_keido) = convertLocationToWGS84($g_ido, $g_keido);
echo '緯度=' . $wgs_ido . '<br>';
echo '経度=' . $wgs_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);
}
/**
* 世界測地系変換メソッド
* 座標を世界測地系に変換する
* @param string $g_ido 緯度(GoogleMap形式)
* @param string $g_keido 経度(GoogleMap形式)
* @return array array([変換後の緯度], [変換後の経度])
*/
function convertLocationToWGS84($g_ido, $g_keido) {
// 世界測地系に変換する
$wgs84_keido = $g_keido - $g_ido * 0.000046038
- $g_keido * 0.000083043 + 0.010040;
$wgs84_ido = $g_ido - $g_ido * 0.00010695
+ $g_keido * 0.000017464 + 0.0046017;
return array($wgs84_ido, $wgs84_keido);
}
なお、変換式はこちらを参考にさせていただきました。
関連:
3月 14th, 2008 at 14:04:34
Docomoが出しているオープンiエリアの仕様書上では、測地系の情報はGEOというパラメータに入っていることになっていますが、固定で日本測地系になるのでしょうか?
3月 16th, 2008 at 18:59:15
失礼しました。
確かにむしろ世界測地系固定で値が取れてる感じですね。
仕様書PDFのP22に「日本測地系の経度緯度情報を・・・」という表記があったのと、iエリアの測地には元々結構誤差があるのでそれに惑わされました。
資料を読む限りGEOのパラメータには世界測地系を示す文字以外は入ってこないようですね。
該当する記事を修正しました。ご指摘ありがとうございました。
4月 21st, 2008 at 11:03:30
その変換式はここがたぶんオリジナル
http://jsgt.org/ajax/newmon/GoogleMapsAPIv2.htm#GLatLng_tky