Come trovare un punto sulla superficie terrestre dati un punto di origine, distanza e direzione (azimut)
-
06-07-2019 - |
Domanda
La domanda precedente "Geoalgoritmo per trovare coordinate di punto da una posizione nota per distanza e rilevamento" chiede la stessa cosa, ma la soluzione trovata è una approssimazione approssimativa. Voglio una soluzione più accurata. Sto confrontando i risultati con le Great Circle Distance , che è una delle migliori Distanza geografica formule conosciute.
Soluzione
Questa è la formula migliore che ho visto finora, da 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)
Altri suggerimenti
Quanto distano questi due punti? Sono un fan dell'utilizzo delle proiezioni di Gauss-Kruger, che funzionano bene se i due punti si trovano a una distanza di circa 100 miglia nautiche. Ha il vantaggio di permetterti di lavorare con la trigonometria regolare nello spazio locale, e poi di riconvertirlo in coordinate geodetiche.
Se sono più distanti da quello, ricado sul Grande Cerchio, ma con il raggio del cerchio come raggio di curvatura della Terra in un dato punto lungo il cuscinetto desiderato, calcolato usando l'ellissoide WGS-84.