正確なものは求めていないので以下のソースを見つけたのですが
変数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;
ちょっと書いてみました。
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に値が得られるはずです。
x = A * (x2-x1) * Math.cos( y1 );より
x1,x2に経度をy1,y2に緯度であり
角度Cについては軸の傾きで答えとして出ているので
0のとき西東向き (ー-> または <-ー)
45のとき 北東か南西
90(-90)のとき 南か北方向
-45のとき 北西か南東
になります。
分度器を赤道に置いたときの方向と考えれば分かりやすいと思います。
ただしこのままだとCの値だけだと二通りの方向が考えられるので
y1,y2の二つの緯度の差がどちらが大きくなっているのかをみて方向を決定する必要があります。
わかりやすい回答ありがとうございます。
赤道に分度器を置いて考える点と、どちらの差が大きいか調べる必要がある点について盲点だったため非常に参考になりました。
x1/x2が東経、y1/y2が北緯とすると、この式だと(x1,y1)を基点として、(x2,y2)が真東の場合が0度ですね。そこを基点に、北方向が+、南方向が-になります。
ただ、これだとx1<x2でないと正確な値が出ないと思います。x1=x2だとゼロ除算例外になりますし、x1>x2だと±反転した値になると思いますよ。
わかりやすい回答ありがとうございます。
とても参考になりました。
ちょっと書いてみました。
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)は何をしているのでしょうか?
ソースを修正していただきありがとうございます。
とても助かります!
数学についての知識が乏しいので、皆さんの回答やソースがとても勉強になります。
1点質問なのですが((dy>=0) ? 1:-1)は何をしているのでしょうか?