Calcolare la distanza tra due punti di latitudine-longitudine? (formula di Haversine)

Come si calcola la distanza tra due punti specificati da latitudine e longitudine?

Per chiarire, vorrei la distanza in chilometri; i punti usano il sistema WGS84 e vorrei capire le precisioni relative degli approcci disponibili.

Soluzione

Questo link potrebbe esserti utile, in quanto descrive in dettaglio l'uso della formula di Haversine per calcolare la distanza.

Estratto:

Questo script [in Javascript] calcola le distanze ad ampio raggio tra due punti - cioè la distanza più breve sulla superficie terrestre - usando la formula di 'Haversine'.

function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
  var R = 6371; // Radius of the earth in km
  var dLat = deg2rad(lat2-lat1);  // deg2rad below
  var dLon = deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}
Commentari (19)

Ecco un'implementazione in C#:


static class DistanceAlgorithm
{
    const double PIx = 3.141592653589793;
    const double RADIUS = 6378.16;

    /// 
    /// Convert degrees to Radians
    /// 
    /// <param name="x">Degrees
Commentari (5)

Per calcolare la distanza tra due punti su una sfera è necessario fare il calcolo del Grande Cerchio.

Ci sono un certo numero di librerie C/C++ per aiutare con la proiezione delle mappe in MapTools se hai bisogno di riproiettare le distanze su una superficie piana. Per fare questo avrete bisogno della stringa di proiezione dei vari sistemi di coordinate.

Potresti anche trovare MapWindow uno strumento utile per visualizzare i punti. Inoltre, dato che è open source, è un'utile guida su come usare la libreria proj.dll, che sembra essere la principale libreria di proiezione open source.

Commentari (0)