【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.htmlのJavaプログラムを参考にさせていただきながら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………………………………