13

Quale è meglio per calcolare la distanza tra due punti di latitudine/longitudine, The Haversine Formula o The Vincenty's Formula? Perché?La formula di Haversine o la formula di Vincenty sono migliori per il calcolo della distanza?

La distanza è ovviamente calcolata sulla Terra. Le coordinate WGS84 vs GCJ02 influiscono sul calcolo o sulla distanza (la formula di Vincenty prende in considerazione l'asse WGS84)?

Ad esempio, in Android, la Formula Haversine viene utilizzata in Google Map Utils, ma la Formula Vincenty viene utilizzata dall'oggetto android.Location (Location.distanceBetween()).

risposta

7

Haversine è un calcolo più semplice ma non offre l'alta precisione offerte da Vincenty.

Vincenty è più preciso, ma è anche più intensivo dal punto di vista computazionale e pertanto sarà più lento e aumenterà l'utilizzo della batteria.

Come per qualsiasi cosa "migliore" è una questione della vostra particolare applicazione. Per la tua applicazione, Vincenty potrebbe essere una scelta "migliore" di Haversine, ma per una diversa applicazione, Haversine potrebbe essere una scelta migliore. Dovrai esaminare i dettagli dei tuoi casi d'uso e prendere una decisione basata su ciò che trovi lì.

+1

mia comprensione è che nella maggior parte delle applicazioni, la formula Haversine (che assume una terra sferica) offre una precisione sufficiente per i punti fino a diverse centinaia di miglia di distanza, mentre la formula di Vincenty (basato su una terra ellissoide) offre una precisione sufficiente per qualsiasi coppia di punti, e in particolare per i punti vicino agli antipodi. – njuffa

14

Haversine e Vincenty sono due algoritmi per risolvere diversi problemi . Haversine calcola la grande distanza del cerchio su una sfera mentre Vincenty calcola la distanza più breve (geodetica) sulla superficie di un ellissoide di rivoluzione. Quindi la risposta alla tua domanda può essere suddiviso in 2 parti :

  1. Vuoi calcolare la distanza su una sfera su un ellissoide?
  2. Quanto è accurato Haversine o Vincenty nel calcolare il problema dato?

Per le applicazioni terrestri, un ellissoide di rivoluzione è un'approssimazione ragionevole di a "livello medio del mare"; l'errore è & plusmn; 100 m. L'ingrandimento di questo ellissoide è piccolo, circa 1/300, quindi può essere approssimato da una sfera (di volume uguale, ad esempio).

Le distanze dei grandi cerchi differiscono dalle distanze geodetiche fino allo 0,5%. In alcune applicazioni, ad es. Qual è la distanza da Capo a Cairo ?, questo errore può essere trascurato. In altre applicazioni, ad esempio, che determina i confini marittimi , è troppo grande (è 5 m su una distanza di 1 km). In generale, sei più sicuro usando la distanza geodetica.

Se siete interessati è la distanza percorsa (in auto, in barca o aereo), ci sono un sacco di vincoli sulla strada intrapresa e né la grande cerchio o la distanza geodetica, che misurano la lunghezza dei percorsi più brevi su una superficie ideale, sarebbe appropriato.

Sulla questione se gli algoritmi sono precisi:

Haversine una precisione di arrotondamento meno che i punti sono quasi antipodi. Formule migliori sono fornite nello Wikipedia article on great-circle distances.

Vincenty è di solito una precisione di circa 0,1 mm. Tuttavia, se i punti sono quasi antipodi, l'algoritmo non riesce a convergere e l'errore è molto più grande. Fornisco un algoritmo migliore per risolvere il problema geodetico in Algorithms for geodesics. Vedi anche lo Wikipedia article on geodesics on an ellipsoid.

Risolvere il problema geodetica è più lenta di risolvere per il grande cerchio. Ma è ancora molto veloce (circa 1 μ s per il calcolo), in modo da questo non dovrebbe essere un motivo per preferire distanze grande cerchio.

ADENDUM

Here è il pacchetto Java che implementa il mio algoritmo per la ricerca di distanze geodetiche. A differenza del metodo di Vincenty, questo è accurato per arrotondare e convergere ovunque.

+0

Non è più esatto dire che la formula di Vincenty * a volte * non converge per punti vicini all'antipodale, altrimenti prende solo un numero molto grande di iterazioni per tali coppie di punti? Per dimostrare l'imprecisione * computazionale * nella formula di Haversine, ho codificato sia esso sia il migliorato calcolo del grande cerchio sulla pagina di Wikipedia (basato su una semplificazione dell'algoritmo di Vincenty!) In una sola precisione. Con 100M casi di test, peggiore errore caso è stato '4,44,148 mila chilometri @ (-64,492126, -157,413849) (64,452,232 mila, 22,589,592 mila)' [Hav] e '0,00,392 mila chilometri @ (-5,779476, 166,661,758 mila) (0,646,194 mila, -44,298119)' [Impr] – njuffa

+1

Il problema con il metodo di Vincenty per i punti vicino agli antipodi non è che la convergenza sia lenta; piuttosto è che il metodo di soluzione iterativo è * unstable * in questo caso (se inizi con un risultato vicino alla soluzione, ogni iterazione ti allontana dalla soluzione). Si noti che l'errore massimo fornito per il metodo "migliorato", 0,00393 km, è vicino al limite di arrotondamento per l'aritmetica a precisione singola; in pratica è necessaria una doppia precisione. – cffk

+0

Sono perfettamente consapevole del fatto che il metodo migliorato consente di ottenere distanze di cerchio elevate precise fino alla precisione singola completa, ma il limite di lunghezza sui commenti non lascia spazio per indicarlo esplicitamente. Volevo soprattutto sottolineare * quanto migliore * la formula migliorata di Wikipedia sia (grazie per il puntatore), pur essendo a malapena più computazionalmente costosa della formula classica di Haversine: sembra che si debba sempre usare la formula migliorata, piuttosto che Haversine. La doppia precisione è necessaria nei calcoli a distanza di qualsiasi tipo sembrerebbe dipendere dai requisiti di precisione di ogni caso d'uso. – njuffa