1

私は、ユーザーの現在地を見つけるためのGPS位置ナビゲーションに基づくAndroidアプリを開発しています。GPS_PROVIDERを使用していますPASSIVE_PROVIDERやNETWORK_PROVIDERのような他のプロバイダーを使用したくない現在、コードは機能しており、座標が正確に表示されますが、アプリケーションを終了して再度アプリケーションを起動すると、古い座標とは少し異なる座標が表示されます。私は同じ場所と同じ位置にいます。
GPS座標を見つけるために、次のコードを使用しました。

LocationManager mlocManager = (LocationManager) 
        getSystemService(Context.LOCATION_SERVICE);
MyLocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, mlocListener);

私のリスナークラスは

public class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location loc) {
        loc.getLatitude();
        loc.getLongitude();
        String Text = "My current location is: " + "Latitud = "
            + loc.getLatitude() + "Longitud = " + loc.getLongitude();
        TextView txtgps = (TextView) findViewById(R.id.text_GPS_Coordinates);
        txtgps.setText(Text);
        Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT)
                .show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(getApplicationContext(), "Disable",
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(getApplicationContext(), "Enable",
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

AndroidManifestで権限を定義します:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

正確で信頼できる座標を得る方法を教えてください。可能であれば、コードを説明してください。

4

2 に答える 2

2

最新のロケーション修正が最も正確であると期待するかもしれません。ただし、位置情報の修正の精度はさまざまであるため、最新の修正が常に最良であるとは限りません。いくつかの基準に基づいて場所の修正を選択するためのロジックを含める必要があります。基準は、アプリケーションとフィールドテストのユースケースによっても異なります。

ロケーション修正の精度を検証するために実行できるいくつかの手順は次のとおりです。

  • 取得した場所が以前の見積もりよりも大幅に新しいかどうかを確認します。
  • 場所によって主張された精度が以前の見積もりよりも良いか悪いかを確認します。
  • 新しい場所がどのプロバイダーからのものであるかを確認し、それをより信頼できるかどうかを判断します。

これとは別に、GPSはwifiまたはタワーの最後にキャッシュされた場所を提供する場合があります。これは既知のバグであり、これを克服するために、これを無視するカスタムアルゴリズムを作成できます。

于 2013-01-24T11:15:07.823 に答える
1

場所を取得するために使用している方法は常に正確です。位置が少しずれただけでも違う座標が表示されます..

座標を 1 つだけ取得したい場合 (つまり、アプリケーションを最初に開いたとき、最後まで同じままである場合) を使用するとします。

public class MyLocationListener implements LocationListener
{
int f=1;
public void onLocationChanged(Location loc) {
    // TODO Auto-generated method stub
   if(f==1)
   {
    loc.getLatitude();
    loc.getLongitude();
    f=2
   }

    String Text = "My current location is: " +
    "Latitud = " + loc.getLatitude() +
    "Longitud = " + loc.getLongitude();

    TextView txtgps = (TextView) findViewById(R.id.text_GPS_Coordinates);

    txtgps.setText(Text);

    Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();

}

これで、位置座標が 1 つだけ取得されます (つまり、第 1 座標)。

アプリケーションの実行時に一度だけ場所を取得することに注意してください。次回アプリケーションを開いたときに変更されます。移動中に場所を見つけたい場合は、この方法を使用しないでください。

于 2013-01-24T11:12:03.143 に答える