Cómo encontrar un punto en la superficie de la Tierra dado un punto de origen, distancia y dirección (acimut)

StackOverflow https://stackoverflow.com/questions/1019642

  •  06-07-2019
  •  | 
  •  

Pregunta

La pregunta anterior "El geoalgoritmo para encontrar coordenadas de punto desde una ubicación conocida por distancia y rumbo" pregunta lo mismo, pero la solución encontrada es una aproximación aproximada. Quiero una solución más precisa. Estoy comparando los resultados con las fórmulas Great Circle Distance , que es una de las mejores fórmulas de distancia geográfica conocidas.

¿Fue útil?

Solución

Esta es la mejor fórmula que he visto hasta ahora, de http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html

a, b = major & minor semiaxes of the ellipsoid   
f = flattening (a−b)/a   
φ1, φ2 = geodetic latitude   
s = length of the geodesic   
α1, α2 = azimuths of the geodesic (initial/final bearing)    

tanU1 = (1−f).tanφ1 (U is ‘reduced latitude’)    
cosU1 = 1/√(1+tan²U1), sinU1 = tanU1.cosU1 (trig identities; §6)     
σ1 = atan2(tanU1, cosα1)    (1)
sinα = cosU1.sinα1  (2)
cos²α = 1 − sin²α (trig identity; §6)    
u² = cos²α.(a²−b²)/b²    
A = 1+u²/16384.{4096+u².[−768+u².(320−175.u²)]} (3)
B = u²/1024.{256+u².[−128+u².(74−47.u²)]}   (4)

σ = s / b.A (1st approximation), σ′ = 2π     
while abs(σ−σ′) > 10-12 { (i.e. 0.06mm)  
        cos2σm = cos(2.σ1 + σ)  (5)
    Δσ = B.sinσ.{cos2σm + B/4.[cosσ.(−1 + 2.cos²2σm) − B/6.cos2σm.(−3 + 4.sin²σ).(−3 + 4.cos²2σm)]} (6)
    σ′ = σ   
    σ = s / b.A + Δσ    (7)
}        
φ2 = atan2(sinU1.cosσ + cosU1.sinσ.cosα1, (1−f).√[sin²α + (sinU1.sinσ − cosU1.cosσ.cosα1)²])    (8)
λ = atan2(sinσ.sinα1, cosU1.cosσ − sinU1.sinσ.cosα1)    (9)
C = f/16.cos²α.[4+f.(4−3.cos²α)]    (10)
L = λ − (1−C).f.sinα.{σ+C.sinσ.[cos2σm + C.cosσ.(−1 + 2.cos²2σm)]} (difference in longitude)    (11)
α2 = atan(sinα, −sinU1.sinσ + cosU1.cosσ.cosα1) (reverse azimuth)   (12)
p2 = (φ2, λ1+L)

Otros consejos

¿Qué tan separados están estos dos puntos? Soy fanático de usar las proyecciones de Gauss-Kruger, que funcionan bien si los dos puntos están dentro de las 100 millas náuticas más o menos. Tiene la ventaja de permitirle trabajar con trigonometría regular en el espacio local y luego convertirlo nuevamente a coordenadas geodésicas.

Si están más separados que eso, retrocedo en el Gran Círculo, pero con el radio del círculo como el radio de curvatura de la Tierra en un punto dado a lo largo del rumbo deseado, calculado usando el elipsoide WGS-84.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top