緯度経度をデータとして扱う
エンジニアブログ
RCMSでも緯度経度はデータの切り口として、重要視しています。
(他には、時間(日付)・人などがあります)
RCMS
http://www.r-cms.jp/
日本であればここにたくさんデータがあるので、この辺を活用して、
国土数値情報ダウンロードサービス
GoogleMapsAPI
Yahoo!地図情報
などとつなぐといろいろなサービスが展開できますよね。
まあ、そうやってGoogleさんに位置情報をせっせと送信することになるのですが。。
以下は、うちで使っている緯度経度関係の関数です。
※今のところ、間違いを見つけてはいないのですが、正しい保証はありません。
<?PHP
/*
* 2地点間の距離を緯度経度データから割り出す
* gmap_x :A地点の経度
* gmap_y :A地点の緯度
* gmap_x2:B地点の経度
* gmap_y2:B地点の緯度
* return (km)
*/
function getDistanceFromGPS($gmap_x,$gmap_y,$gmap_x2,$gmap_y2){
$gmap_y = 3.1415926535*$gmap_y/180;
$gmap_x = 3.1415926535*$gmap_x/180;
$gmap_y2 = 3.1415926535*$gmap_y2/180;
$gmap_x2 = 3.1415926535*$gmap_x2/180;
$gmap_y = $gmap_y - ((11.55/60)*3.1415926535/180)*sin(2*$gmap_y);
$gmap_y2 = $gmap_y2 - ((11.55/60)*3.1415926535/180)*sin(2*$gmap_y2);
$c=cos($gmap_y)*cos($gmap_y2)*cos($gmap_x-$gmap_x2)+sin($gmap_y)*sin($gmap_y2);
$s=sqrt(1-$c*$c);
$t=$s/$c;
$z=atan($t);
$z=6369*$z;
return $z;
}
/*
* 緯度経度を度=>度分秒 or 度分秒=>度に変換
* map_num :緯度経度
* return 緯度経度
*/
function changeGPSUnit($map_num,$type = 0){
if($type == 1){
//度分秒=>度
$arrMap_num = split(".",$map_num);
return $arrMap_num[0] + $arrMap_num[1]/60 + $arrMap_num[2]/3600;
}else{
//度=>度分秒
$EH = floor($map_num);
$EM = floor(($map_num - $EH)*60);
$ES = round(($map_num - $EH - $EM/60)*3600,1);
return $EH.".".$EM.".".$ES;
}
}
/*
* 緯度経度を日本測地系=>世界測地系 or 世界測地系=>日本測地系に変換
* ln :経度
* la : 緯度
* return 緯度経度
*/
function changeGPSWJ($ln,$la,$type = 0){
if($type == 1){
//日本測地系=>世界測地系
$lng = $ln - $la * 0.000046038 - $ln * 0.000083043 + 0.010040;
$lat = $la - $la * 0.00010695 + $ln * 0.000017464 + 0.0046017;
return array("lng"=>$lng,"lat"=>$lat);
}else{
//世界測地系=>日本測地系
$lng = $ln + $la * 0.000046047 + $ln * 0.000083049 - 0.010041;
$lat = $la + $la * 0.00010696 - $ln * 0.000017467 - 0.0046020;
return array("lng"=>$lng,"lat"=>$lat);
}
}
?>