--- title: 2地点間の緯度と経度から直線距離を計算する author: kazu634 date: 2009-08-04 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4745;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---

轍 ~自転車的なる日記~ 緯度・経度から距離を求める方法」を参考にして、2地点間の距離を計算するスクリプトを作成しました。

Perlソース

use strict;
use warnings;
use Perl6::Say;
use Math::Trig;
# 戸塚駅:
#  - 東経: 139.5373496
#  - 北緯: 35.4037596
# ルノアール鎌倉駅前店
#  - 東経: 139.5511142
#  - 北緯: 35.3194949
# 戸塚駅からルノアール鎌倉駅前店までの距離を求める(メートル単位)
say calc_distance(139.5373496, 35.4037596, 139.5511142, 35.3194949);
sub calc_distance {
# 引数の取得
my ( $src_lng, $src_lat, $target_lng, $target_lat ) = @_;
# 角度をラジアンに変換する
$src_lng    = deg2rad($src_lng);
$src_lat    = deg2rad($src_lat);
$target_lng = deg2rad($target_lng);
$target_lat = deg2rad($target_lat);
# 距離を計算するための準備
my $lat = abs($src_lat - $target_lat);
my $lng = abs($src_lng - $target_lng);
# x軸方向の変位
my $disp_lng = 6378137 * $lng * cos($src_lat);
# y軸方向の変位
my $disp_lat = 6378137 * $lat;
# 距離
return sqrt(($disp_lng ** 2) + ($disp_lat ** 2));
}

実行結果

~/working/tmp_perl on simoom634 [504] $: perl temp.pl
9463.08275991388