ヒュベニの距離計算式 ↑
2点間の緯度・経度から距離を計算する ↑
D=sqrt((M*dP)*(M*dP)+(N*cos(P)*dR)*(N*cos(P)*dR))
D: 2点間の距離(m)
P: 2点の平均緯度
dP: 2点の緯度差
dR: 2点の経度差
M: 子午線曲率半径
N: 卯酉線曲率半径
M=6334834/sqrt((1-0.006674*sin(P)*sin(P))^3)
N=6377397/sqrt(1-0.006674*sin(P)*sin(P))
PHPでスクリプトを作ってみる ↑
- せっかくだから、上記の式でPHPスクリプトを作ってみる。下記の2つのファイルをPHPが動くサーバーに送り込む。
-------------test01.html
<html>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=euc-jp">
<TITLE>ヒュベニの距離計算</TITLE>
</HEAD>
<body>
<BODY BGCOLOR="#FFFF99">
<p>ヒュベニの距離計算</p>
<HR>
<BR>
<form action="test01.php" method="post">
始点 緯度:<input type="text" name="sitenido" value="35" size="2">
度<input type="text" name="sitenihun" value="6" size="2">
分<input type="text" name="sitenibyou" value="2.000" size="7">
秒(秒は小数可)<br>
始点 経度:<input type="text" name="sitenkeido" value="140" size="3">
度<input type="text" name="sitenkeihun" value="5" size="2">
分<input type="text" name="sitenkeibyou" value="28.000" size="7">
秒(秒は小数可)<br>
<HR>
終点 緯度:<input type="text" name="syutenido" value="35" size="2">
度<input type="text" name="syutenihun" value="6" size="2">
分<input type="text" name="syutenibyou" value="18.000" size="7">
秒(秒は小数可)<br>
終点 経度:<input type="text" name="syutenkeido" value="140" size="3">
度<input type="text" name="syutenkeihun" value="4" size="2">
分<input type="text" name="syutenkeibyou" value="41.000" size="7">
秒(秒は小数可)<br>
<HR>
<input type="submit" name="exec" value="入力データをおくる">
<BR>
<input type="reset" name="exec" value="やりなおし">
</form>
<HR>
</body>
</html>
---------test01.php
<?
//始点 緯度 変数の取出し
$sitenido = $HTTP_POST_VARS["sitenido"];
$sitenihun = $HTTP_POST_VARS["sitenihun"];
$sitenibyou = $HTTP_POST_VARS["sitenibyou"];
//始点 経度 変数の取出し
$sitenkeido = $HTTP_POST_VARS["sitenkeido"];
$sitenkeihun = $HTTP_POST_VARS["sitenkeihun"];
$sitenkeibyou = $HTTP_POST_VARS["sitenkeibyou"];
//終点 緯度 変数の取出し
$syutenido = $HTTP_POST_VARS["syutenido"];
$syutenihun = $HTTP_POST_VARS["syutenihun"];
$syutenibyou = $HTTP_POST_VARS["syutenibyou"];
//終点 経度 変数の取出し
$syutenkeido = $HTTP_POST_VARS["syutenkeido"];
$syutenkeihun = $HTTP_POST_VARS["syutenkeihun"];
$syutenkeibyou = $HTTP_POST_VARS["syutenkeibyou"];
//始点 緯度 度分秒を度(小数)に変換後さらにラジアンに変換
$sitenido = $sitenido + $sitenihun/60 + $sitenibyou/3600;
$sirad = $sitenido*M_PI/180;
// 始点 経度 度分秒を度(小数)に変換後さらにラジアンに変換
$sitenkeido = $sitenkeido + $sitenkeihun/60 + $sitenkeibyou/3600;
$skrad = $sitenkeido*M_PI/180;
// 終点 緯度 度分秒を度(小数)に変換後さらにラジアンに変換
$syutenido = $syutenido + $syutenihun/60 + $syutenibyou/3600;
$syirad = $syutenido*M_PI/180;
// 終点 経度 度分秒を度(小数)に変換後さらにラジアンに変換
$syutenkeido = $syutenkeido + $syutenkeihun/60 + $syutenkeibyou/3600;
$sykrad = $syutenkeido*M_PI/180;
//2点間の平均緯度を計算
$aveirad = ($sirad + $syirad)/2;
//2点間の緯度差を計算
$deffirad = $sirad - $syirad;
//2点間の経度差を計算
$deffkrad = $skrad - $sykrad;
//子午線曲率半径を計算
$temp = 1 - 0.006674*(sin($aveirad)*sin($aveirad));
$dmrad = 6334834 / sqrt($temp*$temp*$temp);
//卯酉線曲率半径を取得
$dvrad = 6377397 / sqrt($temp);
//ヒュベニの距離計算式
$t1 = $dmrad * $deffirad;
$t2 = $dvrad*Cos($aveirad)*$deffkrad;
$d = sqrt($t1*$t1 + $t2*$t2);
echo "2点間の距離は";
echo $d;
echo "mです。";
?>