1

アプリケーションの移動距離の一部を作成する作業を行っていますが、現在地に問題があります。ロケーションリスナーでは、トーストで緯度と経度の座標を出力しています。座標が常に変化しているのがわかります。毎回完全に同じになることは決してないことがわかりましたが、最初に登録された場所をリスナーに保存してから確認すると、その場所と常に更新される場所との間の距離は飛び回り、25 メートルにも及ぶことがあります。ここに私のリスナーコードがあります:

public class MyLocationListener implements LocationListener {
    public void onLocationChanged(Location location) {

        if(flag ==0){

            locationC = location;
            flag = 1;
        }

        //Constantly updated location
        locationD = location;

        //walking distance is distance from first initialized location to current location
        walking = locationC.distanceTo(locationD);

        String s =String.valueOf(location.getLatitude()); 
        String ss =String.valueOf(location.getLongitude()); 

         Toast.makeText(getApplicationContext(),"  "+s+" "+ss+" " ,Toast.LENGTH_SHORT).show(); 
         Toast.makeText(getApplicationContext(),"Walking distance is "+walking ,Toast.LENGTH_SHORT).show(); 

    }

    public void onStatusChanged(String s, int i, Bundle b) {
    }

    public void onProviderDisabled(String s) {
    }

    public void onProviderEnabled(String s) {
    }
}

onCreate メソッドで実行される残りのロケーション コードは次のとおりです。

// Creating the location manger and towers etc
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria crit = new Criteria();
    towers = lm.getBestProvider(crit, false);
    location = lm.getLastKnownLocation(towers);


    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATE, MINIMUM_DISTANCECHANGE_FOR_UPDATE,  new MyLocationListener());

    if (location != null) {
        glat = location.getLatitude();
        glon = location.getLongitude();
    }

場所を取得するためのより正確な方法があるかどうかを確認するために使用している V2 マップを調査したところ、それgoogleMap.getLocation();が壊れていることがわかり、実際にアプリケーションが失敗しました。リスナーを正しく設定したかどうか、または他の場所コードを設定したかどうかはわかりませんが、場所がそのように飛び回るべきではないと感じています。

適度に曇り空の下で GPS を使用して位置を取得していると言うと、デバイスは GPS によって位置が設定されていることを通知します。より良い場所を取得するためのより実用的な方法についてアドバイスできる人はいますか?

4

3 に答える 3

3

現在の GPS 技術では、緯度/経度が 20 ~ 50 メートル以内でジャンプするのはまったく普通のことです。

于 2013-03-21T12:15:21.593 に答える
3

25m の偏差は、民間のGPS 精度では完全に正常です。

特に GPS の仕組みの詳細については、こちらを参照してください。

精度が低い原因は必ずしも明らかではありませんが、通常は次のエラーの原因のいずれかに起因します。

- Multipath / signal corruption
- Low number of satellites / poor satellite geometry
- Erratic Ionospheric activity
于 2013-03-21T12:15:30.093 に答える
3

Which is the value of your constant MINIMUM_DISTANCECHANGE_FOR_UPDATE?

I've assigned 50 meters to it and it's ok for my app. I also assigned 2 minutes to MINIMUM_TIME_BETWEEN_UPDATE.

Source code of my app | See method subscribeToLocationUpdates

于 2013-03-21T12:24:03.463 に答える