緯度経度 -単位変換-
【送料 無料!】 GARMIN いいよねっと携帯GPS 携帯ナビゲーションGPSMAP60AP
緯度経度の表現
DMS形式
・度/分/秒.秒表記(度/分/ミリ秒表記) 秒の表現は10進
35/39/15.152(35/39/15152) 139/45/27.932(139/45/27932)
・ミリ秒換算
128355152 503127932
ミリ秒単位→度単位 3600000で割る
DEG形式(Degree) dddd.ddddd
・度.度(10進)、緯度経度を単位”度”のみで表現
136.6694786
DEGとDMSの変換
136.6694786を136°40′10.123に変換
136と0.6694786に分ける
0.6694786に60を掛ける
40.168716 → 40分
0.168716に60を掛ける
10.12296 → 10.12296秒
(度 * 3600 + 分 * 60 + 秒) * 1000 = 分
phpだと・・・こんな感じ?
$Japan_Lat[$i] = (int)$JapanLat[$i] * 3600 + (int)( ($JapanLat[$i] – (int)$JapanLat[$i]) * 60 ) *60 + ( (int)( ($JapanLat[$i] – (int)$JapanLat[$i]) * 60 ) – ( ($JapanLat[$i] – (int)$JapanLat[$i]) * 60 ) ) * 60;
$Japan_Lng[$i] = (int)$JapanLng[$i] * 3600 + (int)( ($JapanLng[$i] – (int)$JapanLng[$i]) * 60 ) *60 + ( (int)( ($JapanLng[$i] – (int)$JapanLng[$i]) * 60 ) – ( ($JapanLng[$i] – (int)$JapanLng[$i]) * 60 ) ) * 60;
さらにミリ秒に変換する
136°40′10.123
136+40/60+10/(60*60)+123/(60*60*60)
DMSからDEGへの変換
136°40′10.123を136.6694786に変換
$lng = spilit(‘/’,’$LNG’);
$lng[0] + ( $lng[1] + ( $lng[2] / 60 ) ) / 60
$lat = spilit(‘/’,’$LAT’);
$lat[0] + ( $lat[1] + ( $lat[2] / 60 ) ) / 60
測地系変換 これは簡易計算で、誤差が発生します。
<日本測地系⇒世界測地系>
世界測地系緯度 = 日本測地系緯度 – 0.00010695 * 日本測地系緯度 + 0.000017464 * 日本測地系経度 + 0.0046017
世界測地系経度 = 日本測地系経度 – 0.000046038 * 日本測地系緯度 – 0.000083043 * 日本測地系経度 + 0.010040
<世界測地系⇒日本測地系>
日本測地系緯度 = 世界測地系緯度 + 0.00010696 * 世界測地系緯度 – 0.000017467 * 世界測地系経度 – 0.0046020
日本測地系経度 = 世界測地系経度 + 0.000046047 * 世界測地系緯度 + 0.000083049 * 世界測地系経度 – 0.010041
日本測地系(Tokyo Datum)、単位は秒、ミリ秒は小数点以下2桁以内で指定すること。
phpで緯度経度を扱う際に便利なライブラリ→Class Location
使い方
require('class.location.php');
$location = new location();
・測地系の変換 $tokyo = $location->wgs842tokyo($Lat, $Lng);
・座標形式の変換
$TokyoLng = $location->deg2dms($tokyo[1]);
$TokyoLat = $location->deg2dms($tokyo[0]);
・距離計算