非常“简单”的问题:给定两个CLLocationCoordinate2D,如何从第一个到第二个获得方位(以弧度表示)?我已经做了大量的研究和研究,包括一般问题和Objective-C/Cocoa Touch/iOS。计算两个CLLocationCoordinate2D之间的方位
这里是我的实现:
- (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)
我已经双重和三重检查了公式是正确的。我也发现了一些像上面这个例子那样的值,一些是正确的,一些是错误的。我玩过各种模块或返回值的界限,也没有运气。
任何想法?我的代码有问题吗?也许我误解了数学函数的工作原理?
我最初的反应是“转换纬度/经度弧度?这是什么样的疯狂?“然后我真的尝试了它,就像一个魅力 – 2010-09-29 05:20:53
好点。地理纬度和经度度的使用是如此根深蒂固,很容易忘记他们描述球体几何中的角度地球大多数现代语言中的trig函数需要弧度,强制转换 – 2010-09-30 05:34:26
你能解释2吗?如果fLng较大,会怎样? – Nick 2010-10-12 11:02:43