Cálculo da velocidade para um aplicativo de navegação sem o método getSpeed ()
Estou desenvolvendo um aplicativo que é mais uma corrida no horário entre seus amigos.
Preciso calcular a velocidade de um veículo em movimento e não quero usarLocation.getSpeed()
método. (Explicado em detalhes na parte inferior por que não quero usá-lo)
Estou tentando calcular a velocidade com a ajuda do Latitude e Longitude, e é aqui que preciso de ajuda.
A ajuda necessária: Eu gostaria de saber é:
Se o algoritmo estiver corretoDevo calcular em centímetros em vez de metrosE se já houver algum código / biblioteca disponível, faça isso.Estou usando o seguinte código:
Isso me dá distância entre dois pontos 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;
}
E o código a seguir é como está sendo usado:
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();
Quando o executo, recebo a seguinte saída desse LogCat:
Distance: 0, TimeDelta: 0 seconds,speed: 0 Accuracy: 5.0
Razões detalhadas
Os consumidores-alvo não devem ter dispositivos de alta qualidade com chips GPS de alta qualidade, portanto, sempre é possível obter uma correção muito precisa quando o dispositivo está em movimento.
Portanto, não quero depender daLocation.getSpeed()
método, desde que observei, ele fornece valores de velocidade somente quando a precisão está na faixa de 5 a 8 metros.
As faixas normais de precisão que estou obtendo em circunstâncias gerais são de 10 a 15 metros egetSpeed()
não dá velocidade. AtéhasSpeed()
começa a retornar falso.
Estou mexendo na minha cabeça por mais de três dias, qualquer ajuda seria profundamente apreciada.
Muito obrigado antecipadamente!