■CALENDAR■
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30    
<<前月 2014年04月 次月>>
■NEW ENTRIES■
■RECENT COMMENTS■
■RECENT TRACKBACK■
■CATEGORIES■
■ARCHIVES■
■PROFILE■
■POWERED BY■
BLOGN(ぶろぐん)
BLOGNPLUS(ぶろぐん+)
■OTHER■

宿探しなら「JTB旅館・ホテル予約」 即日開通!初めてでも安心のレンタルサーバー

緯度、経度から距離と向きを算出
マッシュアップで「カッテモバイル地図」を作っています。
最近は、安いガソリンスタンドを探す機能を作りましたが、この中で、見つかったGSと現在地との位置関係を表示するため、
2点の緯度経度から方角と距離を算出するプログラムを作りました。

この部分だけ、切り出すと何かの役に立つかもしれませんので、計算フォームページを作りました。

http://prog47.blogdns.org/etc/show_dist_dir.php

2点の緯度、経度から距離を求めるのは
http://www.yuyuyu.jp/other/google_maps/cal/distance_disp3.php
での測地線航海算法の公式を使っています。

function GeoDistance($lat1,$lng1,$lat2,$lng2,$decimal ){
// 引数 $decimal は小数点以下の桁数
if( (abs($lat1-$lat2) < 0.00001) && (abs($lng1-$lng2) < 0.00001) ){
$distance = 0;
}else{
$lat1 = $lat1*pi()/180;$lng1 = $lng1*pi()/180;
$lat2 = $lat2*pi()/180;$lng2 = $lng2*pi()/180;

$A = 6378140;
$B = 6356755;
$F = ($A-$B)/$A;

$P1 = atan(($B/$A)*tan($lat1));
$P2 = atan(($B/$A)*tan($lat2));


$X = acos( sin($P1)*sin($P2) + cos($P1)*cos($P2)*cos($lng1-$lng2) );
$L = ($F/8)*( (sin($X)-$X)*pow((sin($P1) + sin($P2)),2)/pow(cos($X/2) ,2) - (sin($X)-$X)*pow(sin($P1)-sin($P2),2)/pow(sin($X),2) );

$distance = $A*($X+$L);
$decimal_no=pow(10,$decimal);
$distance = round($decimal_no*$distance/1000)/$decimal_no;
}
$format='%0.'.$decimal.'f';
return sprintf($format,$distance);

}


方角は
http://oshiete1.goo.ne.jp/qa721140.html での回答2によります。

function GeoDir($lat1,$lng1,$lat2,$lng2){
// 緯度経度$lat1,$lng1 の点を出発として、緯度経度$lat2,$lng2への方位
// 北を0度で右回りの角度0〜360度
$Y = cos($lng2*pi()/180) * sin($lat2*pi()/180 - $lat1*pi()/180);
$X = cos($lng1*pi()/180) * sin($lng2*pi()/180) - sin($lng1*pi()/180) * cos($lng2*pi()/180) * cos($lat2*pi()/180 - $lat1*pi()/180);
$dirE0=180*atan2($Y, $X)/pi(); // 東向きが0度の方向
if($dirE0<0){
$dirE0=$dirE0+360; //0〜360 にする。
}
$dirN0=fmod( ($dirE0+90), 360); //($dirE0+90)÷360の余りを出力 北向きが0度の方向
return ($dirN0);
}

というところです。
GeoDirの返り値を東西南北の言葉にするのは、省略です。


宿探しなら「JTB旅館・ホテル予約」 即日開通!初めてでも安心のレンタルサーバー
| http://prog47.blogdns.org/blog/index.php?e=283 |
| Google Earth | 11:07 PM | comments (0) | trackback (1) |










http://prog47.blogdns.org/blog/tb.php/283
緯度・経度から二点間の距離と方向を計算する
ジオ系を触っていて、緯度、経度から二点間の距離とその方向を計算するロジックは色々なところで必要になるので、メモ。 元記事は下で、JavaScript に書き直しただけです。 緯度、経...
| それはBlog | 2010/09/07 01:59 PM |

PAGE TOP ↑