経度1度あたりの距離の計算[プログラミング]
(2014-04-14 19:30:05) by shinoda


< ページ移動: 1 2 >

<画像:20140414_sankaku2.JPG>
Perl では、コサインの計算をするために cos という関数が用意されてる。
この関数に、B点の角度をラジアン値で与えてやれば斜辺を 1とした時の底辺の長さが出るのだ。

新しい言葉が出てきたけど(^^;>ラジアン
ラジアン値というのは、例えばホールで買って来たケーキを切り分けるじゃん。三角形の形(外側の辺は直線ではなく弧)に。その時の外側の円の部分(弧)の長さと、直線部の一辺(半径)の長さが同じになる時の直線二辺をつなぐ部分の角度を 1とした時の値である。
言葉で書くとわかりづらいと思うので、ラジアンなんかもう忘れたわ!という人は、各自ググってください(笑)
ちなみに、1ラジアンは約 57.296度ね。
さらに言うと、1ラジアン時の弧の長さを 1(半径と同じ)とすると、半円(角度 180度)のラジアン値は約 3.1415ということになる。半円の円周は半径の3.1415倍だからな。ラジアン値も 3.1415倍されるわけ。

ということで、緯度 35度の場合のラジアン値の計算は、35度 ÷ 180度 × 3.1415(最大のラジアン値)で、約 0.610847ラジアンとなる。
これを、cos 関数に突っ込むと、0.819162505153376という数字が返ってくる。斜辺 1とした時の底辺が 0.819162505153376というわけだ。

これで、緯度35度地点で輪切りにした円の半径が出るね。地球の半径(斜辺)との関係が 1:0.819162505153376 だから、6,378.137(地球の半径):x で、x の値は約 5,224.7306 となる。故に円周は約 32,811.397lmとなり、360で割れば約 91.142519km となるというわけである。(上の方で計算している値と微妙に違うんだけど(^^;計算につかった数値の桁数が違ってるもんで、その誤差だから許して(^^;)

Perl でプログラムを書くと、

$pi = 3.1415926535898; # 円周率近似値
$lt = 34.410280; # 場所1の緯度(10進)横川駅
$er = 6378.137; # 地球の半径(km)

$cf = cos($lt / 180 * $pi) * 2 * $pi * $er; # 任意の緯度の円周(km)
$kd = $cf / 360; # 経度 1度あたりの km。

こうね。

で、厳密に言うと、緯度によって地球の半径も変わってくるので、毎回 6,378.137を使うのはどうなの?緯度の値が大きくなる(南半球であればマイナス方向に大きくなる)と極半径 6,356.752 に近くなるよね!・・・みたいな話もあるんだけど、あなたの作ろうとしているプログラムでそこまでの精度がいる?そもそも、物件データとして登録している緯度・経度も、そんな誤差が許されないほどの精度なの?ってことだよ。
もちろん、地球がきれいな楕円であれば任意の緯度地点での地球の半径も計算出来ると思うけど、そこまでの精度は現実には不要なので赤道半径を常に使ってもかまわないだろう。どうしても厳密な計算が必要っていう人は、その具体的な例を上げてみてくれ。

ないよな?(笑)

ということで、数十年ぶりの三角関数のお勉強は、これにて終了(笑)

※高校生の時のわずかな記憶と、適当にググった内容をもとに書いています。多分、俺の高校時代と考え方が変わってる点や誤解からの間違いなんかもあると思いますがご容赦を>数学マスターな皆様

< ページ移動: 1 2 >


コメント(3)
TOPへ戻る

Powered by
MT4i 3.0.8