我目前能够在给定的日期时间计算太阳的海拔高度和方位角,现在我希望能够从Google地图上的任何当前位置指向箭头朝向太阳方向(基于海拔坐标)和方位角)。
我正在开发一款应用程序,用于向用户显示用户当前位置的太阳方向。
任何想法都非常受欢迎。
答案 0 :(得分:1)
鉴于地理坐标lat
(北方为正)和long
(东方为正),地球上的3D坐标(一种可能性):
/ x \ / cos(lat) * sin(long) \
p = | y | = | cos(lat) * cos(long) |
\ z / \ sin(lat) /
然后是北方向:
/ -sin(lat) * sin(long) \
north = | -sin(lat) * cos(long) |
\ cos(lat) /
东方向是:
/ cos(lat) * cos(long) \
east = | -cos(lat) * sin(long) |
\ 0 /
给定方位角和高度,您可以将3D方向设为:
dir = (-cos(azimuth) * north -sin(azimuth) * east) * cos(altitude) + sin(altitude) * p
因此,对于任何正标量t
,您可以计算您在地球上的位置与对象之间的点:
pos(t) = p + t * dir
您可以通过标准化将位置投影回地球:
pos_normalized(t) = pos(t) / ||pos(t)||
,其中||pos(t)||
是pos(t)
的长度。
鉴于此,您可以计算纬度和经度:
lat2 = asin(pos_normalized(t).z)
long2 = atan2(pos_normalized(t).x, pos_normalized(t).y)
这是一个位于太阳方向的点。选择一些足够小的t
来计算它(它应该远小于1;单位基本上是地球半径的倍数)。对于某些地图,所有这些位置可能位于一条线上。但是,无法保证任意地图。因此,您可能希望采样几个点并生成折线。