人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

2点間の経度と緯度から方位を知りたいです。
正確なものは求めていないので以下のソースを見つけたのですが
変数Cに代入される値が-19.98や77.45となります。
これはどのような値がどの方位を示しているのでしょうか?

x1 = x1 * Math.PI / 180.0;
y1 = y1 * Math.PI / 180.0;
x2 = x2 * Math.PI / 180.0;
y2 = y2 * Math.PI / 180.0;

A = 6378137;

x = A * (x2-x1) * Math.cos( y1 );
y = A * (y2-y1);

L = Math.sqrt(x*x + y*y);
C = Math.atan(y / x) *180.0/ Math.PI;

●質問者: koujirou
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:cos X1 ソース 変数
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● planckspace
●27ポイント

x = A * (x2-x1) * Math.cos( y1 );より

x1,x2に経度をy1,y2に緯度であり

角度Cについては軸の傾きで答えとして出ているので

0のとき西東向き (ー?> または <?ー)

45のとき 北東か南西

90(?90)のとき 南か北方向

?45のとき 北西か南東

になります。

分度器を赤道に置いたときの方向と考えれば分かりやすいと思います。

ただしこのままだとCの値だけだと二通りの方向が考えられるので

y1,y2の二つの緯度の差がどちらが大きくなっているのかをみて方向を決定する必要があります。

◎質問者からの返答

わかりやすい回答ありがとうございます。

赤道に分度器を置いて考える点と、どちらの差が大きいか調べる必要がある点について盲点だったため非常に参考になりました。


2 ● hissssa
●27ポイント

x1/x2が東経、y1/y2が北緯とすると、この式だと(x1,y1)を基点として、(x2,y2)が真東の場合が0度ですね。そこを基点に、北方向が+、南方向が?になります。

ただ、これだとx1<x2でないと正確な値が出ないと思います。x1=x2だとゼロ除算例外になりますし、x1>x2だと±反転した値になると思いますよ。

◎質問者からの返答

わかりやすい回答ありがとうございます。

とても参考になりました。


3 ● hissssa
●26ポイント ベストアンサー

ちょっと書いてみました。

x1=x1*Math.PI/180.0;

y1=y1*Math.PI/180.0;

x2=x2*Math.PI/180.0;

y2=y2*Math.PI/180.0;

dx=x2-x1;

dy=Math.log(Math.tan(Math.PI/4+y2/2))-Math.log(Math.tan(Math.PI/4+y1/2));

C=((dy>=0) ? 1:-1)*Math.acos(dx/Math.sqrt(dx*dx+dy*dy))*180.0/Math.PI;

緯度経度をメルカトル図法上の平面座標にしてからacosで経線に対する角度にしてます。元の例と同じく真東が0で、北が+/南がーです。

?180度?+180度の範囲でCに値が得られるはずです。

◎質問者からの返答

ソースを修正していただきありがとうございます。

とても助かります!

数学についての知識が乏しいので、皆さんの回答やソースがとても勉強になります。

1点質問なのですが((dy>=0) ? 1:-1)は何をしているのでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ