Я довольно новичок в Java & Android, и у меня есть некоторые проблемы с кодом.Измерение расстояния до GPS 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 нет. Я понял это из комментариев под ответом Карстен.
Хорошо, тогда как я должен оптимизировать код, поэтому, если я не двигаюсь, расстояние не изменится? –
Я бы придерживался провайдера GPS, увеличивал MIN_DISTANCE_CHANGE_FOR_UPDATES, а также увеличивал MIN_TIME_BW_UPDATES. Поскольку вы также можете получать обновления из других источников между ними, стоит также убедиться, что расстояние между последним обновлением и новым достаточно велико для вашей цели. – Carsten
Спасибо, что напомнили мне, что точность GPS-спутников не равна 1 метру. Я делаю это для активного отдыха, поэтому, я думаю, я возьму велосипед и немного поеду :) –