-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의 대답에 대한 의견에서 이것을 이해했다.
그러면 코드를 어떻게 최적화해야합니까? 그렇다면 내가 움직이지 않으면 거리가 변하지 않을 것입니다. –
GPS 제공 업체를 계속 사용하고 MIN_DISTANCE_CHANGE_FOR_UPDATES을 높이고 MIN_TIME_BW_UPDATES도 늘리십시오. 사이에있는 다른 소스의 업데이트를 얻을 수도 있으므로 최종 업데이트와 새 업데이트 사이의 거리가 사용자의 목적에 충분히 큰지 자신을 확인해 볼 가치가 있습니다. – Carsten
GPS 위성의 정확도가 1 미터가 아니라는 것을 상기시켜 주셔서 감사합니다. 나는 야외 활동을 위해 그것을하고있다. 그래서 나는 자전거를 가져갈 것이고, 조금 탈 것이다. –