4

MyLocationOverlayを使用して現在の場所を表示しています。ただし、場所が更新されるまでにはしばらく時間がかかります。iPhoneに「フォローミー」機能のようなものを実装したかったのですが、ユーザーが移動するとユーザーの位置も移動します。MyLocationOverlayのマーカーを作成して、その場所のライブ更新を実行するにはどうすればよいですか?

カスタムマーカーを描画する必要があるため、draw()とdrawMyLocation()をオーバーライドすることに注意してください。

私の現在のコードは次のようになります:(私のコードの問題は、マーカーがユーザーと一緒に移動しないことです。onLocationChangedが呼び出されるまでに時間がかかるため、マーカーはある場所から別の場所に突然ジャンプします。)

@Override
public synchronized void onLocationChanged(Location location)
{
    if (location != null && mapController != null)
    {
        //Recenter map based on current location
        mapController.animateTo(new GeoPoint((int) (location.getLatitude() * 1e6), (int) (location.getLongitude() * 1e6)));
    }
    super.onLocationChanged(location);
}
4

1 に答える 1

2

ロケーションマネージャーにそのメソッドを呼び出すまでの待機間隔を最小限に抑えることができますが、その間隔を100%の時間で正確に気にする必要はありません(LocationManager.requestLocationUpdates()の説明を参照)。短くなる可能性がありますが、長くなる可能性があります。たとえば、曇っている可能性があり、gpsチップが必要な頻度で位置情報の更新を取得できないためです。

これを克服する適切な方法はありません-位置情報サービスには常に欠陥があります。私が使用したすべての位置認識アプリは、gpsチップが一時的に修正を失ったため、時々マーカーを「ハング」させました。

これを少しスムーズにするためにできる唯一のことは、移動速度を覚えておくことです。gpsが修正を失った場合、ユーザーがgpsのときと同じ速度で同じ方向に移動しているという仮定に基づいて、マップマーカーに偽の更新を与えます。修正がありました。ただし、これを行うのは、2〜5回スキップされた実際の更新の場合にのみ意味があります(修正が数秒間失われた場合をスムーズにするため)。

UPDそのために、ある種のプロキシロケーションリスナーを実装できます。これにより、指定した間隔(200ミリ秒ごとなど)を厳密に考慮してマーカーが更新され、保存されているロケーションに基づいて更新されます。また、保存された場所は、実際の場所のリスナーによって非同期的に更新できます。ロケーションオブジェクトには、データを提供した修正の時間があります(getTime()メソッドを参照)。これを使用して、次のマーカーの動きを「予測」する必要があるか、ロケーションが諦めてgpsにないことをユーザーに通知するのに十分古いかどうかを判断できます。彼らがどこにいるのか手がかり:)

于 2012-02-07T16:15:58.987 に答える