Android GPS跟踪返回奇怪的结果

时间:2015-04-10 02:52:52

标签: android

我在使用HTC One上的GPS跟踪数据时遇到了一些奇怪的数字。本质上,我有一个函数来计算两个GPS位置之间的近似差异,但结果是......奇数。

我得到的第一个读数通常是合理的,然后下一个读数都是0.0km直到大约5或6。

我每10秒计算一次距离,同时以大约50公里/小时的速度移动,所以我自然会在每次阅读时预计不到0.0公里的距离。

有人可以找出问题所在吗?我可以获得GPS读数的次数有限制吗?谢谢!

以下是我的数据以50 km / h的速度进行的示例,每10秒读取一次读数:

186m
0.0m
0.0m
0.0m
190m
0.0
...



public class profile extends Activity {

    GPSTracker gps;
    private double long1, lat1;

    public static double haversine(
            double lat1, double lng1, double lat2, double lng2) {
        int r = 6371; // average radius of the earth in km
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lng2 - lng1);
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
                        * Math.sin(dLon / 2) * Math.sin(dLon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double d = r * c;
        return d*1000.00;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        gps = new GPSTracker(profile.this);
        if(gps.canGetLocation()) {

            lat1 = gps.getLatitude();
            long1 = gps.getLongitude();
        }
        final Handler handler = new Handler();
        Timer timer = new Timer();
        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    @SuppressWarnings("unchecked")
                    public void run() {
                        try {
                            if(gps.canGetLocation()) {
                                gps = new GPSTracker(profile.this);
                                double latitude = gps.getLatitude();
                                double longitude = gps.getLongitude();
                                double distance = haversine(lat1, long1, latitude, longitude);
                                Toast.makeText(
                                        getApplicationContext(),
                                        String.valueOf(distance) + " meters", Toast.LENGTH_LONG).show();
                                long1 = longitude;
                                lat1 = latitude;
                            } else {
                                gps.showSettingsAlert();
                            }
                        }
                        catch (Exception e) {
                            // TODO Auto-generated catch block
                        }
                    }
                });
            }
        };

        timer.schedule(doAsynchronousTask, 0, 10000);



    }
}

1 个答案:

答案 0 :(得分:0)

什么是GPSTracker课程?

我的猜测是,首先使用Wi-Fi和Cell塔(使用网络提供商)计算结果并返回相同的大致位置。一段时间后,您将获得GPS修复并开始获得更准确的位置信息。