Android 安卓GPS精确测距

Android 安卓GPS精确测距,android,gps,Android,Gps,我对Java和Android非常陌生,在代码方面有一些问题 location1.distanceTo(location2)方法是否也在考虑高程变化的情况下计算距离 另一个问题是,虽然我没有移动设备,但测量的距离会发生变化。 这是我的代码: public class GpsCalculator{ public Activity activity; private LocationManager locationManager = null; private Location previousLoc

我对Java和Android非常陌生,在代码方面有一些问题

location1.distanceTo(location2)
方法是否也在考虑高程变化的情况下计算距离

另一个问题是,虽然我没有移动设备,但测量的距离会发生变化。 这是我的代码:

public class GpsCalculator{
public Activity activity;
private LocationManager locationManager = null;
private Location previousLocation = null;
private double totalDistance = 0D;
private Context context;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1; // 1 meter
private static final long MIN_TIME_BW_UPDATES = 1000; // 1 second
TextView distance_tracker;

public GpsCalculator(TextView dt) {
    distance_tracker = dt;
}


public void run(Context act){
    context = act;
    // Get the location manager
    locationManager = (LocationManager) context.getSystemService(Service.LOCATION_SERVICE);

    // Add new listeners with the given params
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, locationListener); // Network location
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, locationListener); // Gps location
}

public void stop(){
    locationManager.removeUpdates(locationListener);
}
DecimalFormat df = new DecimalFormat("#");
private LocationListener locationListener = new LocationListener(){
    @Override
    public void onLocationChanged(Location newLocation){
        if (previousLocation != null){
            GpsCalculator.this.totalDistance +=  previousLocation.distanceTo(newLocation);
        }

        // Update stored location
        GpsCalculator.this.previousLocation = newLocation;

        CharSequence text = Double.toString(totalDistance);
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();

        distance_tracker.setText(df.format(totalDistance)+ " m");
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}; }
我想提到的是,无论是否使用网络提供程序侦听器,准确性问题始终存在

结论


代码是正确的,但GPS数据的准确性不正确。我从卡斯滕回答下的评论中了解到了这一点。

位置对象通常也包含高度信息,因此会考虑海拔


更新之间的位置是否更改?我会这么认为,因为在你的情况下,它每秒钟都会更新一次。

那么,我应该如何优化代码,以便在不移动的情况下,距离不会改变?我会坚持使用GPS提供商,增加最小距离更改更新,并增加最小时间更新。由于您可能还会从其他来源获得更新,因此,您还需要验证自己上次更新和新更新之间的距离是否足以满足您的需要。感谢您提醒我GPS卫星的精度不超过1米。我这样做是为了户外活动,所以我想我会骑自行车去骑一会儿:)