2016-10-24 10 views
-1

現在、私は特定の日時の太陽の高度と方位を計算することができます。現在、Googleマップの現在の位置から矢印を指し示すことができます。太陽の方向(標高座標と方位角に基づく)。Googleマップ上の現在の位置から太陽までの方向

私はユーザーに現在の場所から太陽の方向をユーザに示すことを想定しているアプリケーションに取り組んでいます。

どのようなアイデアも大歓迎です。

/x \ /cos(lat) * sin(long) \ 
p = | y | = | cos(lat) * cos(long) | 
    \ z/ \ sin(lat)   /

北方向は、次にである:(北について陽性)およびlong(東について陽性)

+0

2Dマップなので、高度は役割を果たしません。使用する座標系によっては、サイン成分とコサインを使って矢印成分(例えば '(-sin(方位角)、cos(asimuth))'を得るでしょう。これはyが南北軸であり、xが西東軸と両軸は互いに比例します)。 –

+0

あなたのコメントありがとうございます...高度と経度を使用するGoogleマップを使用している場合、実際にはどういう意味ですか? Azimuthの値が0.13224351331114464であると仮定します。どのように私はGoogleマップ上の場所を得ることができると思いますか:Sin(0.13224351331114464)とCos(0.13224351331114464)? – Toothfairy

+0

何が必要ですか?画面上の座標、または地球上の緯度/経度の座標ですか? –

答えて

1

与えられる地理座標が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よりもはるかに小さくする必要があります;単位は基本的に地球半径の倍数です)。特定の地図では、これらの位置はすべて直線上にある場合があります。ただし、これは任意のマップでは保証されていません。だから、いくつかの点をサンプリングして代わりにポリラインを生成したいかもしれません。

関連する問題