Algoritmo para compensar una latitud / longitud en una cantidad de metros

95

Estoy buscando un algoritmo que, al darme 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 una Haversine inversa. También podría trabajar con una distancia y una transformación de 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 integrado. La precisión no es crítica, dentro de 10 metros sería bueno.

    
pregunta Thomas O 27.10.2010 - 00:43

4 respuestas

95

Si sus desplazamientos no son demasiado grandes (menos de unos pocos kilómetros) y no está en los polos, utilice la estimación rápida y sucia de que 111,111 metros (111,111 km) en la dirección y es de 1 grado (de latitud) y 111,111 * cos (latitud) metros en la dirección x es 1 grado (de longitud).

    
respondido por el whuber 27.10.2010 - 05:48
50

Como dice Liedman en su respuesta, las fórmulas de aviación de Williams son una fuente invaluable, y para mantener la precisión dentro de los 10 metros para los desplazamientos de hasta 1 km, probablemente deba usar los más complejos de estos.

Pero si está dispuesto a aceptar errores de más de 10 m para puntos con un desplazamiento de más de 200 m aproximadamente, puede utilizar un cálculo de tierra plano simplificado. Creo que los errores seguirán siendo menos de 50 m para las compensaciones de hasta 1 km.

 //Position, decimal degrees
 lat = 51.0
 lon = 0.0

 //Earth’s radius, sphere
 R=6378137

 //offsets in meters
 dn = 100
 de = 100

 //Coordinate offsets in radians
 dLat = dn/R
 dLon = de/(R*Cos(Pi*lat/180))

 //OffsetPosition, decimal degrees
 latO = lat + dLat * 180/Pi
 lonO = lon + dLon * 180/Pi 

Esto debería devolver:

 latO = 51,00089832
 lonO = 0,001427437
    
respondido por el haakon_d 27.10.2010 - 15:55
20

Encuentro que el Formulario de Aviación, aquí es ideal para este tipo de fórmulas y algoritmos. Para su problema, revise "lat / long dada radial y distance": here

Tenga en cuenta que este algoritmo puede ser un poco demasiado complejo para su uso, si desea mantener bajo el uso de las funciones de trigonometría, etc.

    
respondido por el Liedman 27.10.2010 - 09:41
0

Podría tener sentido proyectar el punto primero. Podrías hacer algo como este pseudocódigo:

falt_coordinate = latlon_to_utm(original_koordinate)
new_flat_coordinate = flat_coordinate + (x,y)
result_coordinate = utm_to_latlon(new_flat_coordinate)

donde (x, y) es el desplazamiento deseado.

No es necesario usar utm, cualquier sistema de coordenadas planas, lo que tiene sentido en su área será suficiente.

¿Con qué software estás trabajando?

    
respondido por el MartinHvidberg 24.04.2018 - 19:59

Lea otras preguntas en las etiquetas