3

2秒ごとに場所の緯度と経度を取得するAndroidアプリケーションを作成しました。アプリケーションは正常に動作しますが、Androidデバイスを1つの場所で一定に保つと、そのポイントの緯度と経度が異なります...驚くべきことに、これらの異なる座標でさえ、たとえ異なっていても同じ場所を指します。

たとえば、一定の場所の場合

私は

Latitude  -     10.013499  
Longitude -     76.3303451

2秒後

Latitude  -     10.0135014  
Longitude -     76.3303467

2秒後

Latitude  -     10.0135001
Longitude -     76.3303451

2秒後

Latitude  -     10.0135011  
Longitude -     76.3303466

誰かが私がこのようになっている理由を教えてもらえます
か..特定のポイントの一意の緯度と経度を取得するにはどうすればよいですか。
私のコードを以下に示します

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AndroidGPSTrackingActivity extends Activity {

    Button btnShowLocation, stop;
    double latitude, longitude;
    int is = 0;
    ScheduledExecutorService scheduler;
    // GPSTracker class
    GPSTracker gps;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
        stop = (Button) findViewById(R.id.stop);
        // show location button click event
        btnShowLocation.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // create class object
                scheduler = Executors.newSingleThreadScheduledExecutor();
                scheduler.scheduleAtFixedRate(new Runnable() {

                    public void run() {
                        System.out.println("sss");
                        // Log.i("hello", "world");
                        is++;
                        Log.i("hello", "" + is);
                        runOnUiThread(new Runnable() {

                            public void run() {
                                gps = new GPSTracker(
                                        AndroidGPSTrackingActivity.this);
                                latitude = gps.getLatitude();
                                longitude = gps.getLongitude();
                                Toast.makeText(
                                        getApplicationContext(),
                                        "Your Location is - \nLat: " + latitude
                                                + "\nLong: " + longitude,
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                }, 2, 2, TimeUnit.SECONDS);
            }
        });
        stop.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                scheduler.shutdown();
                onDestroy();
            }
        });
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }
}
4

2 に答える 2

2

GPSは正確ではありません。一般的な電話のハードウェアを使用すると、いつでも最大約10メートル離れることができます。したがって、連続した複数の読み取り値は、正確な位置が同じになることはありません。

ネットワークプロバイダーはさらに悪いです-それは最大1kmの不正確さを持つ可能性があります。

于 2013-03-27T05:15:50.417 に答える
0

座標が同じ場所を指しているわけではありません。十分にズームインすると、座標が数メートル異なることがわかります。
ある場所で静止していることを検出するには、最後の位置までの距離を計算し、しきい値を超えた場合にのみその場所を使用するか、GPS位置の速度属性を使用します。

于 2013-03-27T10:27:44.397 に答える