我正在创建一个应用程序,它将指向我绘制的 GPS 坐标方向的简单箭头。所以我说的是我当前的位置lat和long,所以lat1,lon1是当前位置......然后将它们与lat和long的静态坐标进行比较,称为lat2,lon2。
我花了几个小时研究和测试,但我一直遇到同样的问题。这是非常恶化的。当我开始向目的地行驶时,使用 iPhone 内置的 GPS/指南针时,箭头完全失灵。它有时会将箭头显示在它需要的位置的完全相反的一侧,挂在右边……几乎没有什么是实心的。
这是我正在运行的当前代码
cpLocLat = 43.026629;
cpLocLon = -78.867188;
这些是浮点值和我想开车去的坐标。
float lat1 = self.locManager.location.coordinate.latitude;
float lat2 = cpLocLat;
float lon1 = self.locManager.location.coordinate.longitude;
float lon2 = cpLocLon;
float heading = atan2(sin(lon2 - lon1) * cos(lat2), cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2 - lon1));
heading = RADIANS_TO_DEGREES(heading);
if (heading < 0) {
heading = heading + 360;
}
每次调用 locationManager didUpdateToLocation delagate 时,我都会使用此函数。一旦我有了这些信息,它就会在 locationManager didUpdateHeading delagte 中使用,如下所示:
CGAffineTransform where = CGAffineTransformMakeRotation(degreesToRadians((degrees - newHeading.magneticHeading)));
[self.compassContainer2 setTransform:where];
这是 degressToRadians 宏
#define degreesToRadians(x) (M_PI * x / 180.0)
所以每当我运行这段代码时,它都会严重失败,让我发疯!
顺便说一句 - 我已使用以下 URL 作为参考
http://www.shawngrimes.me/2011/07/calculating-heading-with-corelocation/