使用C中的两组坐标(纬度和经度)进行轴承

时间:2012-08-12 00:00:44

标签: c coordinates latitude-longitude bearing

我已经开始研究c中的自主直升机了。我需要帮助找到一种方法来计算轴承acuratley。我使用两组坐标(纬度和经度),一组是当前位置,另一组是目标点。我已经将纬度和经度转换为十进制格式,所以....

40°58'19.86"N = 40.972183
74°14'52.74"W = 74.247983

有人能告诉我c中的代码,找到我可以使用的方位或公式吗?

我看过:http://www.movable-type.co.uk/scripts/latlong.html当我将它转移到c时,结果毫无意义。

这就是我的尝试:

 double x = Sin(Longitude2 - Longitude1) * Cos(Latitude2);
 double y = Cos(Latitude1) * Sin(Latitude2) - Sin(Latitude1) * Cos(Latitude2) * Cos(Longitude2 - Longitude1);
 double heading = (Atan2(x, y) % 2 * 3.14159265) (180/3.14159265);

2 个答案:

答案 0 :(得分:2)

您是否在计算之前将坐标从度数转换为弧度?

angleRad = 3.14159265 * angleDeg / 180; 并且

bearing = Atan2(y, x); 在那个网站上。 轴承应依次从rad转换为deg:

bearing = 180 * bearing / 3.14159265; 如果是负值,最终:

bearing = bearing + 360;

我不知道如何使用上面的约定(使用“%”)来编写它。

Latitude1和Longitude1是观察者的坐标 Latitude2和Longitude2是目标点的坐标。

该网站的公式运作良好。

答案 1 :(得分:1)

对于您考虑的非常小的区域,您可以假设世界是平坦的。 如果您还需要在本地工作,您可以预先计算地面上的度/纬度值,以米(或英尺)为单位

然后只需将delta lat / lon转换为距离并执行正常的trig。

要将距离转换为纬度/经度,您可以使用Google地球来测量它或 How to convert latitude or longitude to meters?