Расчет скорости для навигационного приложения без метода getSpeed ()
Я занимаюсь разработкой приложения, которое больше напоминает гонку во времени между вашими друзьями.
Мне нужно рассчитать скорость движущегося транспортного средства, и я не хочу использоватьLocation.getSpeed()
метод. (Подробно объяснил внизу, почему я не хочу его использовать)
Я пытаюсь рассчитать скорость с помощью доступных мне широты и долготы, и здесь мне нужна помощь.
Нужна помощь: Я хотел бы знать, это:
Если алгоритм правильныйДолжен ли я рассчитывать в сантиметрах вместо метровИ если уже есть какой-либо код / библиотека, которая делает это.Я использую следующий код:
Это дает мне расстояние между двумя точками 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-х дней, любая помощь в этом была бы очень признательна.
Большое спасибо заранее!