MKMapViewを回転させるためにコンパスの見出しを使用しています。回転が少しぎくしゃくしていたので、iPhoneのGoogleマップのようにフィルタリングしようとしています(またはいくつかのトリックを実行しているように見えます)。
移動平均式を使用してiphoneコンパスからの読み取り値をフィルタリングしようとしていますが、359と0の間のクロスオーバーで失敗します。これは、35xから0に逆方向に平均化し始め、マップが北に近づくにつれて逆方向に回転するためです。西。
このデータをフィルタリングして359からゼロに戻し、移動平均を維持するのが最善の方法です。
コードはここにあります:
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
static float xd=0;
static float k = 0.22;
// Moving average formula
xd = k * xd + (1.0 - k) * newHeading.magneticHeading;
NSLog(@"%0.2f : %0.2f", newHeading.magneticHeading, xd);
[map setTransform:CGAffineTransformMakeRotation((-1 * xd * M_PI) /180)];}
助けてくれてありがとう