Estoy buscando un algoritmo que cuando se le da un par de latitud y longitud y una traducción vectorial en metros en coordenadas cartesianas (x, y) me daría una nueva coordenada. Algo así como un Haversine inverso. También podría trabajar con una transformación de distancia y rumbo, pero esto probablemente sería más lento y no tan preciso. Idealmente, el algoritmo debería ser rápido ya que estoy trabajando en un sistema embebido. La precisión no es crítica, dentro de 10 metros sería bueno.
108
Respuestas:
Si sus desplazamientos no son demasiado grandes (menos de unos pocos kilómetros) y no está justo en los polos, use la estimación rápida y sucia de que 111,111 metros (111,111 km) en la dirección y es 1 grado (de latitud) y 111,111 * cos (latitud) metros en la dirección x es 1 grado (de longitud).
fuente
Como dice Liedman en su respuesta, las fórmulas de aviación de Williams son una fuente inestimable, y para mantener la precisión dentro de los 10 metros para desplazamientos de hasta 1 km, es probable que necesite usar el más complejo de estos.
Pero si está dispuesto a aceptar errores por encima de 10 m para puntos con un desplazamiento de más de aproximadamente 200 m, puede usar un cálculo simplificado de tierra plana. Creo que los errores seguirán siendo inferiores a 50 m para compensaciones de hasta 1 km.
Esto debería devolver:
fuente
Me parece que el Formulario de Aviación, aquí es ideal para este tipo de fórmulas y algoritmos. Para su problema, consulte el "lat / long radial y distancia dados": aquí
Tenga en cuenta que este algoritmo puede ser demasiado complejo para su uso, si desea mantener bajo el uso de funciones de trigonometría, etc.
fuente
Puede tener sentido proyectar el punto primero. Podrías hacer algo como este pseudocódigo:
donde (x, y) es el desplazamiento deseado.
No necesita usar utm, cualquier sistema de coordenadas planas, que tenga sentido en su área servirá.
¿Con qué software estás trabajando?
fuente
Creé un mapa personalizado simple en Google Maps que ilustra el algoritmo de estimación mencionado por la respuesta aceptada (1/111111 == un metro). Siéntase libre de verlo y jugar aquí:
https://drive.google.com/open?id=1XWlZ8BM00PIZ4qk43DieoJjcXjK4z7xe&usp=sharing
fuente