0

次のコードを使用して GPS 座標を確認しましたが、同じ場所に立っていると座標が変化し、距離が 4 ~ 20 mt になるという問題があります。10 メートル以上移動した場合にのみ変更したい。

    locationManager_gps = (LocationManager) this
                    .getSystemService(Context.LOCATION_SERVICE);
            locationManager_gps.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 0, 0,
                    new MyLocationListener_gps());

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

            clat = location.getLatitude();
            clon = location.getLongitude();

            if (clat != plat || clon != plon) {
                float[] results = new float[3];
                Location.distanceBetween(plat, plon, clat, clon, results);

                if (flag_gps == 0) {
                    flag_gps = 1;
                } else {
                    GeoPoint geoPoint = new GeoPoint((int) (clat * 1E6),
                            (int) (clon * 1E6));
                    mapView.getController().animateTo(geoPoint);
                    draw = new MyOverLay(geoPoint);
                    mapView.getOverlays().add(draw);

                    dist_mtr += results[0];

                }
                plat = clat;
                plon = clon;
            }
        }

更新間の最小距離として 50 を使用すると、正常に動作します。私も30にしてみましたが、車での移動中4kmの期間でデータが間違っていました。

私が何をすべきか提案してください。

4

3 に答える 3

0

minTime と minDistance を組み合わせて使用​​する必要があります。両方にゼロとゼロを渡すため、更新間の最小時間は少なくともゼロ秒になり、最小距離はゼロになります。したがって、minTime を適切な時間に設定し、minDistance を 10 メートルに設定します。

locationManager_gps.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 0, 0,
                    new MyLocationListener_gps());
于 2012-09-23T23:42:54.053 に答える
0

これを解決する魔法の弾丸はありません... GPS は 100% 正確ではなく、新しい場所の更新を取得するたびに常に異なる測定値が得られます。

位置の値にローパス フィルターを使用して、問題を最小限に抑えることができます。

clat = plat + (clat-plat) * 0.2; // you should adjust the 0.2 value to the best results
clon = plon + (clon-plon) * 0.2;
....
//your code
....
plat = clat;
plon = clon;

これにより、値の急激な変化の影響が最小限に抑えられます。これは、位置の偽の変化には適していますが、デバイスが動いているときの位置の実際の変化への応答も遅くなります。最良の結果を得るには、定数乗算の値 (上記の 0.2) を慎重に選択する必要があります。

定数の代わりに変数を使用して、loaction 更新の精度に基づいてその値を調整することもできます (変数を 1 に近づける場合は精度が高く、変数を 0 に近づける場合は精度が高くなります)。

幸運を

于 2012-09-24T00:31:56.987 に答える
0

いくつかの場所の測定値を取得し、移動していないときに、これも見ました。さまざまな精度でさまざまな結果を得ることができます。たとえば、10 個の位置測定値を取得してみて、最も精度の高いものを取得し、残りを無視することができます。次に、次の測定値を取得するときは、前の位置の精度の 2 倍の距離にあることを確認してください。たとえば、最初の位置の精度が 16 メートルの場合、次の測定値が前の位置から少なくとも 32 メートル離れており、かつ精度が 32 メートルよりも優れていることを確認してください。

于 2012-09-23T21:21:32.313 に答える