Si tengo una lectura de latitud o longitud en formato NMEA estándar, ¿hay una forma / fórmula fácil de convertir esa lectura a metros, que luego puedo implementar en Java (J9)?
Editar: Ok, parece que lo que quiero hacer no es posible fácilmente , sin embargo, lo que realmente quiero hacer es:
Supongamos que tengo un punto intermedio largo y largo y un usuario largo y largo ¿hay una manera fácil de compararlos para decidir cuándo decirle al usuario que están dentro de una distancia razonablemente cercana al punto intermedio? Me doy cuenta de que razonable es el tema, pero ¿es esto fácilmente factible o todavía es demasiado matemático?
math
geolocation
geo
Adam Taylor
fuente
fuente
Respuestas:
Aquí hay una función de JavaScript:
Explicación: https://en.wikipedia.org/wiki/Haversine_formula
fuente
Dado que está buscando una fórmula simple, esta es probablemente la forma más sencilla de hacerlo, suponiendo que la Tierra es una esfera con una circunferencia de 40075 km.
Longitud en metros de 1 ° de latitud = siempre 111.32 km
Longitud en metros de 1 ° de longitud = 40075 km * cos (latitud) / 360
fuente
Para aproximar distancias cortas entre dos coordenadas, utilicé fórmulas de http://en.wikipedia.org/wiki/Lat-lon :
.
En el siguiente código, he dejado los números en bruto para mostrar su relación con la fórmula de wikipedia.
La entrada de Wikipedia dice que los cálculos de distancia están dentro de 0,6 m por 100 km longitudinalmente y 1 cm por 100 km latitudinalmente, pero no he verificado esto ya que cerca de esa precisión está bien para mi uso.
fuente
Las latitudes y longitudes especifican puntos, no distancias, por lo que su pregunta no tiene sentido. Si está preguntando acerca de la distancia más corta entre dos puntos (lat, lon), vea este artículo de Wikipedia sobre distancias de gran círculo.
fuente
Hay muchas herramientas que facilitarán esto. Vea la respuesta de monjardin para más detalles sobre lo que está involucrado.
Sin embargo, hacer esto no es necesariamente difícil. Parece que está utilizando Java, por lo que recomendaría buscar algo como GDAL . Proporciona envoltorios de Java para sus rutinas, y tienen todas las herramientas necesarias para convertir de Lat / Lon (coordenadas geográficas) a UTM (sistema de coordenadas proyectadas) o alguna otra proyección de mapa razonable.
UTM es agradable, porque es metros, es muy fácil trabajar con él. Sin embargo, deberá obtener la zona UTM adecuada para que haga un buen trabajo. Hay algunos códigos simples disponibles a través de Google para encontrar una zona apropiada para un par lat / long.
fuente
La tierra es una superficie molesta e irregular, por lo que no existe una fórmula simple para hacer esto exactamente. Tienes que vivir con un modelo aproximado de la tierra y proyectar tus coordenadas sobre él. El modelo que generalmente veo usado para esto es WGS 84 . Esto es lo que los dispositivos GPS suelen usar para resolver exactamente el mismo problema.
NOAA tiene algún software que puede descargar para ayudar con esto en su sitio web .
fuente
Aquí está la versión R de la función bh- , por si acaso:
fuente
Una milla náutica (1852 metros) se define como un minuto de arco de longitud en el ecuador. Sin embargo, debe definir una proyección de mapa (consulte también UTM ) en la que está trabajando para que la conversión tenga sentido.
fuente
Hay bastantes formas de calcular esto. Todos ellos usan aproximaciones de trigonometría esférica donde el radio es el de la tierra.
pruebe http://www.movable-type.co.uk/scripts/latlong.html para ver un poco de métodos y código en diferentes idiomas.
fuente
fuente
Para convertir la latitud y la longitud en la representación x e y, debe decidir qué tipo de proyección de mapa utilizar. En cuanto a mí, Mercator elíptico parece muy bien. Aquí puede encontrar una implementación (también en Java).
fuente
Si está lo suficientemente cerca, puede evitar tratarlos como coordenadas en un plano plano. Esto funciona a nivel de calle o ciudad si no se requiere una precisión perfecta y todo lo que necesita es una aproximación aproximada de la distancia involucrada para comparar con un límite arbitrario.
fuente
Basado en la distancia promedio para el degress en la Tierra.
1 ° = 111 km;
Convirtiendo esto para radianes y dividiendo para metros, tome un número mágico para el RAD, en metros: 0.000008998719243599958;
luego:
fuente
Si desea una solución simple, utilice la fórmula de Haversine como se describe en los otros comentarios. Si tiene una aplicación sensible a la precisión, tenga en cuenta que la fórmula de Haversine no garantiza una precisión mejor que 0.5%, ya que supone que la tierra es una esfera. Para considerar que la Tierra es un esferoide achatado, considere usar las fórmulas de Vincenty . Además, no estoy seguro de qué radio debemos usar con la fórmula de Haversine: {Ecuador: 6,378.137 km, Polar: 6,356.752 km, Volumétrico: 6,371.0088 km}.
fuente
it is assuming the earth is a circle
^^ Algunas personas extrañas hacen esto hoy en día ... pero lo que quieres decir es probablemente más bienit is assuming the earth is a sphere
;)Necesitas convertir las coordenadas a radianes para hacer la geometría esférica. Una vez convertido, puede calcular una distancia entre los dos puntos. La distancia se puede convertir a cualquier medida que desee.
fuente