在 C 中使用两组坐标(纬度和经度)的方位

Posted

技术标签:

【中文标题】在 C 中使用两组坐标(纬度和经度)的方位【英文标题】:Bearing using two sets of coordinates (Latitude and Longitude) in C 【发布时间】:2012-08-08 18:12:23 【问题描述】:

我已经开始在 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);

【问题讨论】:

向我们展示您尝试过的 C 代码。 我刚刚添加了我尝试过的代码 双标题 = (fmod(atan2(x, y), 2) * 3.14159265) * (180/3.14159265); ---> 那会是正确的实现吗? 【参考方案1】:

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

angleRad = 3.14159265 * angleDeg / 180; 还有

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

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

bearing = bearing + 360;

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

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

该网站的公式效果很好。

【讨论】:

【参考方案2】:

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

然后只需将 delta lat/lon 转换为距离并进行正常触发。

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

【讨论】:

以上是关于在 C 中使用两组坐标(纬度和经度)的方位的主要内容,如果未能解决你的问题,请参考以下文章

如何确定两组纬度/经度坐标之间的距离?

从另一点以某个方位行驶一段距离后如何获得纬度和经度?

特定时期卫星下的地面经度/纬度(笛卡尔坐标)

给定初始纬度 lng,距离和方位角,在 php 中查找纬度经度点

将经度和纬度与 R 中的国家/地区匹配

给定(纬度,经度)点,距离和方位,如何获得新的经纬度