1

我有以下详细信息列表

Latitude and Longitude,
Date/Time
Altitude and Azimuth

我要做的是计算我计算中使用的相对纬度和经度,这样我就可以用 Google Maps V3 (JavaScript) 绘制一个椭圆

这是可能的还是我应该将我的纬度/经度转换为页面像素并这样做(但这不是我想要完成任务的方式)

[编辑]

我正在尝试根据单个观察者所看到的高度和方位角来收集纬度和经度坐标,因此我的地图上的一个点我想在一天/时间内可视化太阳的路径。

4

1 回答 1

3

更新:与 Dave 聊天后,我相信以下方法可以将太阳位置准确投影到地图上。

这是投影的外观的快速草图。它(应该是)3D。我们希望将太阳向下投影到 2D 表面上,其中 x 和 y 是观察者的偏移量,z 是到投影太阳的距离:

太阳投影图

已知:

  • 地球到太阳的距离,S = 149,597,870,700 m
  • phi(太阳方位角)
  • θ(太阳高度)

我们真正想要的是 z(距离)和 phi(方位角)。phi 是已知的,所以我们需要 z。请记住,S 是巨大的,所以我们应该将它缩小到一个较小的数字,以便我们的坐标可以在地图上看到。只要我们保持新的 S 不变,这无关紧要。现在,要找到 z:

sin(theta) = z / S, therefore z = S * sin(theta)

一旦我们有了距离 z 和方位 phi,我们就可以使用可移动式的这些方程来计算 lat/lng 坐标:

var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R) + 
          Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) );

var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
                 Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));

在哪里d = distance traveled = our zR = earth's radius = 6371000 (meters)

那很简单!现在只需遍历所有太阳位置并将它们绘制在地图上。

以下是一些使用 S=1000 的快速结果:

Azimuth    altitude    z
110        5           87
150        20          342
180        70          939
210        20          342

请注意,如果您正在处理非常大的距离,由于对地球建模的困难,这将不完全准确。

于 2013-03-30T16:46:25.557 回答