[Python] Come posso stimare rapidamente la distanza tra due punti (latitudine, longitudine)?


Answers

Poiché la distanza è relativamente piccola, è possibile utilizzare l'approssimazione della distanza equirettangolare. Questa approssimazione è più veloce rispetto all'utilizzo della formula di Haversine. Quindi, per ottenere la distanza dal punto di riferimento (lat1 / lon1) al punto che stai testando (lat2 / lon2), usa la formula seguente. Nota importante: è necessario convertire tutti i punti lat / lon in radianti:

R = 6371  // radius of the earth in km
x = (lon2 - lon1) * cos( 0.5*(lat2+lat1) )
y = lat2 - lat1
d = R * sqrt( x*x + y*y )

Poiché "R" è in km, la distanza "d" sarà in km.

Riferimento: http://www.movable-type.co.uk/scripts/latlong.html

Question

Voglio essere in grado di ottenere una stima della distanza tra due punti (latitudine, longitudine). Voglio effettuare l'undershoot, poiché questo sarà per la ricerca del grafico A * e voglio che sia veloce . I punti saranno al massimo a 800 km di distanza.




Per la massima velocità, potresti creare qualcosa come una tavola arcobaleno per le distanze coordinate. Sembra che tu conosca già l'area con cui stai lavorando, quindi sembra che il pre-computing potrebbe essere fattibile. Quindi, potresti caricare la combinazione più vicina e usarla.

Ad esempio, negli Stati Uniti continentali, la longitudine è di 55 gradi e la latitudine è 20, che sarebbe 1100 punti interi. La distanza tra tutte le combinazioni possibili è un problema di handshake a cui risponde (n-1) (n) / 2 o circa 600k combinazioni. Sembra abbastanza fattibile per archiviare e recuperare. Se fornisci ulteriori informazioni sui tuoi requisiti, potrei essere più specifico.