--- title: 2地点間の緯度と経度から直線距離を計算する author: kazu634 date: 2009-08-04 url: /2009/08/04/_1313/ 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地点間の距離を計算するスクリプトを作成しました。
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