Calcular la distancia desde la velocidad
Como Peter Bennett ya escribió en su respuesta, obtienes la velocidad actual en millas náuticas de un conjunto de datos GPS.
Multiplicado por el tiempo hasta el siguiente conjunto de datos GPS, obtienes la distancia recorrida entre la recepción de los dos conjuntos de datos.
Pero: si aceleras, la velocidad real aumenta, mientras que tu dispositivo piensa que es constante. Por lo tanto, la distancia calculada es demasiado baja. Lo mismo se aplica al frenar (distancia calculada demasiado alta). Una solución simple: no use la velocidad del conjunto de datos, sino la velocidad promedio entre dos conjuntos de datos. Si la aceleración es constante, la distancia resultante es absolutamente correcta. Si la aceleración no es constante, el resultado es aún mucho más preciso.
Otro PERO: ¿Qué pasa si la señal del GPS se pierde por un período más largo, como en un túnel largo? Digamos, la señal se ha ido durante 6 minutos. El último conjunto de datos establece una velocidad de 50kt, el siguiente de 10kt. ¿Qué tan larga es la distancia?
Si hay un atasco en el túnel y el conductor tuvo que frenar a 10kt justo después de perder la señal del GPS, la longitud es de 10kt * 0.1h = 1nm. Si tiene que frenar justo antes de la próxima señal de GPS, la longitud es de 50kt * 0.1h = 5nm. Usando resultados de velocidad promedio en 3nm. ¿Qué es verdad?
Calcular la distancia de las coordenadas
Para resolver este problema, es mejor no confiar en la velocidad en distintos momentos, sino calcular la distancia a partir de las coordenadas. Esto todavía tiene algunas desventajas, ya que la distancia será un poco demasiado baja para curvas cerradas (o túneles con curvas), pero aún así es mejor que el enfoque de velocidad.
La distancia de una posición al ecuador es
$$ y = H \ cdot \ langle lat \ rangle $$
y la distancia al primer meridiano es
$$ x = H \ cdot \ langle lon \ rangle \ cdot \ cos \ langle lat \ rangle $$
Los ángulos se dan en radianes, no en grados: \ $ \ alpha [rad] = \ frac {\ pi} {180 °} \ cdot \ alpha [°] \ $
Estas fórmulas contienen la distancia al centro de la tierra, que es
$$ H = R_ {earth} + \ langle altitud \ por \ GPS \ rangle $$
La distancia entre dos coordenadas puede ser calculada por
$$ d = \ sqrt {(x_2-x_1) ^ 2 + (y_2-y_1) ^ 2 + (H_2-H_1) ^ 2} $$
Acerca de \ $ R_ {earth} \ $:
Como primera aproximación, la Tierra es una esfera con un radio promedio de 6371 km, pero es más un elipsoide con un radio de 21 km más grande en el ecuador que en los polos. Como resultado, las distancias entre dos coordenadas cerca del ecuador son aproximadamente un 0,5% más grandes que en los polos.
Principalmente para las altitudes correctas, el GPS usualmente usa un modelo de la tierra llamado WGS84, que describe su forma elipsoidal. El radio de la tierra en una latitud dada entonces es:
$$ R_ {earth} = \ sqrt {(6356.7523km \ cdot \ sin \ langle lat \ rangle) ^ 2 + (6378.137km \ cdot \ cos \ langle lat \ rangle) ^ 2} $$
Finalmente, esta fórmula solo es válida si la distancia calculada es pequeña en comparación con el tamaño de la Tierra, por lo que los efectos esféricos se pueden descuidar. (La ruta más corta de San Francisco, California a Roma, Italia es a través de Canadá, la Bahía de Hudson, Groenlandia, Reino Unido, mientras que mi solución es la costa este de EE. UU., Portugal, España). Si está interesado en calcular grandes distancias, consulte Wikipedia sobre las grandes distancias en círculos .
Pero para su aplicación, esta solución está bien