gpt4 book ai didi

ios - 计算两个 CLLocationCoordinate2D 之间的方位

转载 作者:IT老高 更新时间:2023-10-28 11:46:18 27 4
gpt4 key购买 nike

非常“简单”的问题:给定两个 CLLocationCoordinate2D,我怎样才能得到从第一个到第二个的方位角(以弧度表示)?我在这方面做了很多研究和研究,包括一般问题和具体的Objective-C/Cocoa Touch/iOS。

这是我的实现:

- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
float fLat = fromLoc.latitude;
float fLng = fromLoc.longitude;
float tLat = toLoc.latitude;
float tLng = toLoc.longitude;

return atan2(sin(fLng-tLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng));
}

但是,此方法不会为我返回一致的结果。如果方位接近正北或正南,似乎没问题,但是,任何其他方向似乎返回不一致的数据,例如:

从 50.405018、8.437500

至 51.339802、12.403340

我的方法返回:5.918441 弧度

应该是 1.18660576 弧度

(参见 http://www.movable-type.co.uk/scripts/latlong.htmlhttp://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)

我已经两次和三次检查公式是否正确。我还抽查了上面示例中的一堆值,有些正确,有些错误。我玩过各种模数或返回值的边界,也没有运气。

有什么想法吗?我的代码有问题吗?也许我误解了数学函数的工作原理?

最佳答案

这里是使用 Oren Trutner 和我自己建议的更改修改的代码:

#define degreesToRadians(x) (M_PI * x / 180.0)
#define radiansToDegrees(x) (x * 180.0 / M_PI)

- (float)getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
float fLat = degreesToRadians(fromLoc.latitude);
float fLng = degreesToRadians(fromLoc.longitude);
float tLat = degreesToRadians(toLoc.latitude);
float tLng = degreesToRadians(toLoc.longitude);

float degree = radiansToDegrees(atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng)));

if (degree >= 0) {
return degree;
} else {
return 360+degree;
}
}

关于ios - 计算两个 CLLocationCoordinate2D 之间的方位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com