電気ウナギ的○○

About Home

緯度・経度から2点間の直線距離を求める Perl プログラム

shinoda (2014年4月11日 18:26)
地点間の距離を求める要件あり。
まあ、よくある「今いる地点の近くの物件を全部表示」的な仕様の対応です。

多分、実際にはここまで厳密な距離を求める必要はないので、実装はしないと思うけど、「緯度経度より距離を求める方法・備忘録 | 地球は丸い!」に PHP で書いた例が乗っていたので、Perl で書きなおしてみた。

Perl には、deg2rad(度からラジアンに変換)といった関数は標準では用意されていないので、自分で書くか、Math::Trig モジュールを組み込む。もちろん俺はモジュール使うよ(笑)

#!/usr/bin/perl

use Math::Trig; # 三角関数計算用モジュール

$ido1 = 34.410280; # 場所1の緯度(10進)
$keido1 = 132.450732; # 場所1の経度(10進)

$ido2 = 34.397349; # 場所2の緯度(10進)
$keido2 = 132.447650; # 場所2の経度(10進)

$earth_r = 6378.137; # 地球の半径(km)

$idoSa = deg2rad(abs($ido2 - $ido1)); # 緯度差をラジアンに
$keidoSa = deg2rad(abs($keido2 - $keido1)); #経度差をラジアンに

$nanbokuKyori =  $earth_r * $idoSa; # 南北の距離

# 東西の距離(赤道から離れると経度間の距離は縮まるので誤差計算)
$start_ido = $ido1; # 緯度の小さい方を開始地点に
if ($ido1 > $ido2) {
$start_ido = $ido2;
}
$touzaiKyori = cos(deg2rad($start_ido)) * $earth_r * $keidoSa;

# 三平方の定理(xの2乗 + yの2乗 = 求める距離の2乗)で直線距離計算
$d = sqrt(($touzaiKyori ** 2) + ($nanbokuKyori ** 2));

print "2点間の距離=" . $d . "km\n";

# END

ちなみに、場所1は横川駅で、場所2は十日市電停(紙屋町方面行き)だ。
直線距離で約1.5kmあるが、計算してみると、「2点間の距離=1.46704568780563km」と出た。
1.46km。うん、良い感じ。

岩国の自宅と十日市電停の距離を計算すると 47.3516365429946km って・・・
正しいかどうかわからん(^^;
しかし、十日市電停と紙屋町西電停の間を計算すると 0.881788682313342kmと出たんで、正しく計算できてそうだな。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2915

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE