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!

questionAnswers(4)

yourAnswerToTheQuestion