为一个恒定的位置获得不同的纬度和经度

时间:2013-03-27 05:13:30

标签: android gps latitude-longitude

我创建了一个Android应用程序,每2秒获取一次该位置的纬度和经度。该应用程序工作正常,但当我保持我的Android设备在一个位置不变时,我正在获得不同的经度和经度...令人惊讶的是,即使所有这些不同的坐标指向相同的位置,即使它们是不同的。

例如,对于一个恒定的位置

我变得喜欢

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;
    }
}

2 个答案:

答案 0 :(得分:2)

GPS不准确。使用普通电话中的硬件,可以随时关闭大约10米左右。因此,连续多个读数的位置不会相同。

网络提供商更糟糕 - 它可能有1公里的不准确度。

答案 1 :(得分:0)

坐标不指向相同的位置,如果放大得足以看到它们相差几米 要在一个位置检测静止,您可以计算到最后位置的距离,并且只有当它超过阈值时才使用该位置,或者您使用GPS位置的速度属性。