【发布时间】:2011-04-18 02:00:27
【问题描述】:
非常“简单”的问题:给定两个 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.html和http://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)
我已经两次和三次检查公式是否正确。我还抽查了上面示例中的一堆值,有些是正确的,有些是错误的。我玩过各种模数或返回值的边界,也没有运气。
有什么想法吗?我的代码有问题吗?也许我误解了数学函数的工作原理?
【问题讨论】:
标签: ios objective-c coordinates core-location