Расчет скорости для навигационного приложения без метода getSpeed ()

Я занимаюсь разработкой приложения, которое больше напоминает гонку во времени между вашими друзьями.

Мне нужно рассчитать скорость движущегося транспортного средства, и я нене хочу использоватьLocation.getSpeed() метод. (Подробно объяснил в нижней части, почему я нене хочу его использовать)

Я пытаюсь рассчитать скорость с помощью доступных мне широты и долготы, и здесь мне нужна помощь.

Нужна помощь: Я хотел бы знать, это:

Если алгоритм правильныйДолжен ли я рассчитывать в сантиметрах вместо метровИ если естьs любой код / библиотека уже доступна, которая делает это.

Я использую следующий код:

Это дает мне расстояние между двумя точками LatLng:

long getDistanceBetweenPoints(double lat1, double lng1, double lat2, double lng2 ){
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lng2 - lng1);
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                + Math.cos(Math.toRadians(lat1))
                * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
                * Math.sin(dLon / 2);
        double c = 2 * Math.asin(Math.sqrt(a));
        long distanceInMeters = Math.round(6371000 * c);
        return distanceInMeters;
    }

И следующий код, как он используется:

if(lastLat == -1 && lastLng == -1){
    lastLat = location.getLatitude();
    lastLng = location.getLongitude();
    lastTimeStamp = location.getTime();
    return;
}
long distanceInMeters = getDistanceBetweenPointsAndSetTotal(lastLat, lastLng, location.getLatitude(), location.getLongitude());
long timeDelta = (location.getTime() - lastTimeStamp)/1000;
long speed = 0;
if(timeDelta > 0){
speed = (distanceInMeters/timeDelta);
}
Log.d("Calculations","Distance: "+distanceInMeters+", TimeDelta: "+timeDelta+" seconds"+",speed: "+speed+" Accuracy: "+location.getAccuracy());

lastLat = location.getLatitude();
lastLng = location.getLongitude();
lastTimeStamp = location.getTime();

Когда я запускаю его, я получаю следующий вывод из этого LogCat:

Distance: 0, TimeDelta: 0 seconds,speed: 0 Accuracy: 5.0

Подробные Причины

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

Я, таким образом, нене хочу зависеть отLocation.getSpeed() Метод, поскольку я наблюдал, он выдает значения скорости только тогда, когда точность находится в диапазоне 5 ~ 8 метров.

Нормальные диапазоны точности, которые я получаю в обычных обстоятельствах, составляют 10-15 метров, иgetSpeed() Безразлично»не дает никакой скорости. ЧетноеhasSpeed() начинает возвращать false.

Я возился с этой штукой более 3-х дней, любая помощь в этом была бы очень признательна.

Большое спасибо заранее!

Ответы на вопрос(4)

Ваш ответ на вопрос