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

地点間の距離を求める要件あり。
まあ、よくある「今いる地点の近くの物件を全部表示」的な仕様の対応です。

多分、実際にはここまで厳密な距離を求める必要はないので、実装はしないと思うけど、「緯度経度より距離を求める方法・備忘録 | 地球は丸い!」に 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と出たんで、正しく計算できてそうだな。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 緯度・経度から2点間の直線距離を求める Perl プログラム

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2915

コメントする

このブログ記事について

このページは、shinodaが2014年4月11日 18:26に書いたブログ記事です。

ひとつ前のブログ記事は「JavaScript 内から外部 CGI を参照する」です。

次のブログ記事は「GOGO やまぐち弁当も 270円になっていた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら