与えられる地理座標がlat
、地球上の3次元座標は、(一つの可能性)である
/-sin(lat) * sin(long) \
north = | -sin(lat) * cos(long) |
\ cos(lat) /
と東方向です:
/cos(lat) * cos(long) \
east = | -cos(lat) * sin(long) |
\ 0 /
方位と高度を考えると、あなたのように3次元方向を取得することができます。したがって
dir = (-cos(azimuth) * north -sin(azimuth) * east) * cos(altitude) + sin(altitude) * p
、任意の正のスカラーt
のために、あなたは地球上の位置と対象物との間の点を計算することができます。
pos(t) = p + t * dir
あなたは、正規化により、バック、地球の上に位置を投影することができ
:||pos(t)||
はの長さである
pos_normalized(t) = pos(t)/||pos(t)||
を、。
そして、これを与え、あなたは、緯度と経度を計算することができます。
lat2 = asin(pos_normalized(t).z)
long2 = atan2(pos_normalized(t).x, pos_normalized(t).y)
これは、太陽の方向にある一点です。それを計算するには、十分に小さいt
を選択します(1よりもはるかに小さくする必要があります;単位は基本的に地球半径の倍数です)。特定の地図では、これらの位置はすべて直線上にある場合があります。ただし、これは任意のマップでは保証されていません。だから、いくつかの点をサンプリングして代わりにポリラインを生成したいかもしれません。
2Dマップなので、高度は役割を果たしません。使用する座標系によっては、サイン成分とコサインを使って矢印成分(例えば '(-sin(方位角)、cos(asimuth))'を得るでしょう。これはyが南北軸であり、xが西東軸と両軸は互いに比例します)。 –
あなたのコメントありがとうございます...高度と経度を使用するGoogleマップを使用している場合、実際にはどういう意味ですか? Azimuthの値が0.13224351331114464であると仮定します。どのように私はGoogleマップ上の場所を得ることができると思いますか:Sin(0.13224351331114464)とCos(0.13224351331114464)? – Toothfairy
何が必要ですか?画面上の座標、または地球上の緯度/経度の座標ですか? –