2014-11-05 2 views
-1

Я довольно новичок в 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 нет. Я понял это из комментариев под ответом Карстен.

ответ

1

Объект местоположения обычно также содержит информацию о высоте, поэтому учитывается возвышение.

Изменяется ли местоположение между обновлениями? Я бы так подумал, потому что он обновляется каждую секунду в вашем случае.

+0

Хорошо, тогда как я должен оптимизировать код, поэтому, если я не двигаюсь, расстояние не изменится? –

+0

Я бы придерживался провайдера GPS, увеличивал MIN_DISTANCE_CHANGE_FOR_UPDATES, а также увеличивал MIN_TIME_BW_UPDATES. Поскольку вы также можете получать обновления из других источников между ними, стоит также убедиться, что расстояние между последним обновлением и новым достаточно велико для вашей цели. – Carsten

+0

Спасибо, что напомнили мне, что точность GPS-спутников не равна 1 метру. Я делаю это для активного отдыха, поэтому, я думаю, я возьму велосипед и немного поеду :) –

Смежные вопросы