-1
我对Java很新颖& Android和我有一些代码问题。Android GPS精确距离测量
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数据的准确性是没有的。我从Carsten的回答下的评论中理解了这一点。
那么,我该如何优化代码,如果我不动,距离不会改变? – 2014-11-05 12:36:22
我会坚持GPS提供商,增加MIN_DISTANCE_CHANGE_FOR_UPDATES并增加MIN_TIME_BW_UPDATES。由于您可能也会从其他来源获取更新,因此如果上次更新与新版本之间的距离足够满足您的用途,则也值得验证自己。 – Carsten 2014-11-05 12:47:10
感谢您提醒我GPS卫星的精度不是1米。我正在做户外活动,所以我想我会骑自行车并骑一下:) – 2014-11-05 13:02:13