ケータイで取得した位置情報を世界測地系に変換するサンプル
    このエントリをはてなブックマークに登録

先日ご紹介した「ケータイで取得した位置情報を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 Responses to “ケータイで取得した位置情報を世界測地系に変換するサンプル”

  1. Docomoが出しているオープンiエリアの仕様書上では、測地系の情報はGEOというパラメータに入っていることになっていますが、固定で日本測地系になるのでしょうか?

  2. 失礼しました。
    確かにむしろ世界測地系固定で値が取れてる感じですね。
    仕様書PDFのP22に「日本測地系の経度緯度情報を・・・」という表記があったのと、iエリアの測地には元々結構誤差があるのでそれに惑わされました。
    資料を読む限りGEOのパラメータには世界測地系を示す文字以外は入ってこないようですね。
    該当する記事を修正しました。ご指摘ありがとうございました。

  3. その変換式はここがたぶんオリジナル
    http://jsgt.org/ajax/newmon/GoogleMapsAPIv2.htm#GLatLng_tky

コメントを書く