読者です 読者をやめる 読者になる 読者になる

【Perl】緯度経度の二点間距離

http://web.sfc.wide.ad.jp/~rhenium/fx/index.php?1=36.10056&2=140.09111&3=35.65500&4=139.74472

昨日は激しい腹痛、下痢、嘔吐、発熱で病院行きおそらく盲腸と言われるも、CTしたらただの胃腸炎といわれたれにうむです。

まえから、僕は旅行が好きで、ハイキングしたりサイクリングするとき、ロガーアプリなどで位置情報をGPXファイルに保存していたので、それで遊びたいと思っていたのでとりあえず、緯度経度で表された2点の距離を表示するサブルーチンをPerlでつくってみました。

どうやったら求められるかhttp://yamadarake.jp/trdi/report000001.htmlJavaプログラムを参考にさせていただきながらPerlで書きなおしてみました。

$pi=3.1415926535897932384626433;
sub deg2rad{
 $_[0]*$pi/ 180.0;
}
sub hubeny{
 (local $lat1,local $lng1,local $lat2,local $lng2,local $a,local $e2,local $mnum)=@_;
 local $my=deg2rad(($lat1+$lat2)/2.0);
 local $dy=deg2rad($lat1-$lat2);
 local $dx=deg2rad($lng1-$lng2);
 local $sin=sin $my;
 local $w=sqrt 1.0-$e2*$sin*$sin;
 local $m=$mnum/($w*$w*$w);
 local $n=$a/$w;
 local $dym=$dy*$m;
 local $dxcos=$dx*$n*(cos $my);
 sqrt $dym*$dym+$dxcos*$dxcos;
}
sub hunbeny_{
 (local $lat1,local $lng1,local $lat2,local $lng2)=@_;
 hubeny($lat1,$lng1,$lat2,$lng2,$GRS80_A,$GRS80_E2,$GRS80_MNUM);
}
sub dis{
 (local $lat1,local $lng1,local $lat2,local $lng2)=@_;
 local $GRS80_E2 = 0.00669438002301188;
 local $GRS80_MNUM = 6335439.32708317;
 hunbeny_($lat1,$lng1,$lat2,$lng2);
}
print dis(36.10056,140.09111,35.65500,139.74472);

出力結果 58502.4589312411

具合悪いので作業時間が短くちゃんとなってる保証はないですが、おそらく、平気でしょう。
何かあったらコメントかTwitterhttp://twitter.com/chigakuishiにでも知らせてください。
できるだけ早く対処するかもしれません。
ではおやすみなさいZzzz………………………………