プロットした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;
}
locationManagerdidUpdateToLocationdelagateが呼び出されるたびにこの関数を使用します。その情報を取得すると、それはlocationManagerのdidUpdateHeadingdelagteで次のように使用されます。
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/