11

ユーザーが方向を変更したときにマップビューを回転させようとしています。つまり、ユーザーが左折または右折した場合、それに応じて回転する必要があります。現在の位置に基づいてマップビューを回転させていますが、正しく回転していますが、ジッタリングしていました。コードは次のとおりです。回転に使用しました

   public void onGPSUpdate(Location location) 
{
     boolean check=isBetterLocation(location, tempLoc);
    tempLoc=location;

     if(check){
        showLocation(location);

     }

}
isBetterLocation method is copied from google docs for better location.

private void showLocation(Location loc){
   mRotateView.rotate(-loc.getBearing());             
   }

頻繁な更新のために、時間間隔 0 と最小距離 10 で位置の更新を登録しました。ここで私の問題は、マップ ビューが常にジッタリングしていることです。Waze マップのような他のアプリケーションのように、マップ ビューをスムーズに回転させる方法を教えてください。ありがとうございます。 ..

4

4 に答える 4

4

マップを一度に 1 度ずつスムーズに回転させようとしていますか、それとも位置情報の更新時に A 度から B 度に移動させようとしていますか?

何かのようなもの

while (oldAngle != newAngle)
{
mapView.rotate(newAngle);
// this is where you would decied to add or subtract; 
newAngle ++ or -- ; 
}

これがループが非常に速く実行されるのとまったく同じように機能するかどうかわからないので、これを asynctask として実行し、そこに一時停止を追加してスムーズな回転をシミュレートします。

Double angle = Math.atan2((userstartPoint.getX() - userendPoint.getX()), userstartPoint.getY() - userendPoint.getY());
            angle = Math.toDegrees(angle);
            map.setRotationAngle(angle);

基本的には、開始点 (新しい場所) を取得してから、終了点 (古い場所) を取得し、ご覧のとおり、Math.atan2 を実行します。次に、それを度に変換し、マップの回転に設定します。今ではスムーズな回転はしませんが、私はそれを必要としません。ここで、スムーズな回転のために独自のステッパーをセットアップできます。Googleマップにすでにマップがない限り。

于 2012-09-17T13:38:31.443 に答える
3

Location の方位値はあまり正確ではなく、少しジャンプする傾向があるため、方位にフィルターを使用する必要があります。たとえば、最後の 5 つの方位値を配列に保持し、これらの値の平均を方位として使用して、マップを回転させます。または、 SensorEvent のドキュメントで説明されているフィルターを使用してください。この方が使いやすく、微調整することもできます。

これにより、マップの回転が滑らかになります。より安定させます。

編集:

ローパス フィルターのバージョン:

public static float exponentialSmoothing(float input, float output, float alpha) {
    output = output + alpha * (input - output);
    return output;
}

次のように使用します。

final static float ALPHA = 0.33; // values between 0 and 1
float bearing;

// on location/bearing changed:

bearing = exponentialSmoothing(bearing, newBearing, ALPHA);

bearingはマップを実際に回転させるために使用する値であり、newBearingすべてのイベントから得られる方位ですALPHA。古い方位と新しい方位の重み付けによって、回転が新しい向きに作用する速度を制御できます。結果のために考慮されます。値が小さいと古い値の重みが高くなり、値が大きいと新しい値の重みが高くなります。

それがうまくいくことを願っています。

于 2012-09-21T19:13:03.040 に答える