在 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 中使用两组坐标(纬度和经度)的方位的主要内容,如果未能解决你的问题,请参考以下文章