2016-08-12 3 views
0

Я просто пытаюсь выяснить, что я могу сделать, чтобы получить точные координаты GPS с мобильного устройства. Когда я добавляю расстояния вместе, я получаю сумасшедшее чтение, что я ушел 8 м, когда телефон не переместился с моего стола. Я не знаю, связано ли это с тем, как я установил свой LocationRequest. Я читал в google что-то о координатах GPS, точность которых составляет 68%, а некоторые показания могут выпадать из 68% ... возможно, я должен что-то сделать, чтобы удалить неточные чтения?Как получить точные GPS-координаты Android LocationServices

Вот запрос местоположения я создал, так что я могу получить обновление местоположения:

private void createLocationRequest() { 
     locationRequest = new LocationRequest(); 
     locationRequest.setInterval(5000); 
     locationRequest.setFastestInterval(2000); 
     locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

//Some other code below which checks location settings 
} 

Это мой onLocationChanged ... это где я получаю обновление на новом месте, а затем вычислить расстояние между двумя точками:

@Override 
public void onLocationChanged(Location location) { 
    //For the first location update, we will assume this is the starting point 
    if (currentLocation == null) { 
     currentLocation = location; 
    } 
    float distance = 0L; 
    double height = 0; 
    double speed = 0; 
    height = location.getAltitude(); 

    if (runStarted && !runPaused) { 
     locationsList.add(location); //This adds the current location to the list 
     runnerLocations.add(location); //This adds the current route the runner is running (without pauses) 
    } else { 
     locationsList.add(location); 
    } 

    //Calculate the distance from the last recorded gps point 
    if (currentLocation != null && runStarted && !runPaused){ 
     distance = currentLocation.distanceTo(location); 
    } 
    currentLocation = location; 

    //move the map view to the user's current location, regardless of their running state (paused or run) 
    mapObject.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 18)); 

    if (runStarted && !runPaused) { 
     if (location.getSpeed() > 0) { 
      speed = location.getSpeed() * 3.6;// convert m/sec to km/h 
     } 
     DecimalFormat format = new DecimalFormat("###.##"); 
     speed = Double.valueOf(format.format(speed)); 
     recordedSpeeds.add(speed); 
     totalDistance = totalDistance + distance; 
     updateUI(speed, location, distance); 
     if (height > 0) { 
      height = Double.valueOf(format.format(height)); 
     } 
     calculateCurrentCaloriesBurnt(height, speed); 
    } 
} 

Я думал о вычислении расстояний вручную, с некоторой формулой. Что еще я могу попробовать, чтобы получить точные расчеты расстояния?

+1

«телефон не отошел от моего стола» GPS не может получить точные измерения изнутри зданий. Чтобы иметь точную позицию, вы должны выйти на улицу. Кроме того, объект «Location» имеет точность, значение, которое можно проверить, чтобы лучше обработать логику ur. – Budius

+0

«Я получаю сумасшедшее прочтение, что я ушел 8 м, когда телефон не вышел из моего стола» - это не особенно «безумно». Это хорошо в пределах диапазона ошибок чтения GPS. – CommonsWare

ответ

0

Вы можете сделать несколько вещей, чтобы получить более точные показания:

  1. Решите, если устройство является статическим или нет, с помощью акселерометра устройства, и сложить расстояние, только если устройство движется.

  2. Когда вы перемещаетесь, игнорируйте показания с точностью ниже некоторого порога, например. решить, что порог 20 м, и игнорировать чтение, где точность> 20 м.