从Google地图上的当前位置到太阳的方向

时间:2016-10-24 15:20:34

标签: javascript google-maps math astronomy

我目前能够在给定的日期时间计算太阳的海拔高度和方位角,现在我希望能够从Google地图上的任何当前位置指向箭头朝向太阳方向(基于海拔坐标)和方位角)。

我正在开发一款应用程序,用于向用户显示用户当前位置的太阳方向。

任何想法都非常受欢迎。

1 个答案:

答案 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;单位基本上是地球半径的倍数)。对于某些地图,所有这些位置可能位于一条线上。但是,无法保证任意地图。因此,您可能希望采样几个点并生成折线。