地点間の距離を求める要件あり。
まあ、よくある「今いる地点の近くの物件を全部表示」的な仕様の対応です。
多分、実際にはここまで厳密な距離を求める必要はないので、実装はしないと思うけど、「緯度経度より距離を求める方法・備忘録 | 地球は丸い!」に PHP で書いた例が乗っていたので、Perl で書きなおしてみた。
Perl には、deg2rad(度からラジアンに変換)といった関数は標準では用意されていないので、自分で書くか、Math::Trig モジュールを組み込む。もちろん俺はモジュール使うよ(笑)
#!/usr/bin/perluse 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と出たんで、正しく計算できてそうだな。
コメントする