Calcolare la distanza in chilometri tra due coordinate con PHP

In molti scenari di sviluppo web, specialmente nelle applicazioni che gestiscono mappe, geolocalizzazione o servizi di viaggio, può essere utile calcolare la distanza tra due punti geografici espressi in coordinate (latitudine e longitudine). Fortunatamente, con PHP possiamo effettuare questo calcolo con relativa facilità, utilizzando la formula dell'haversine.

La formula dell'haversine è un'equazione che consente di calcolare la distanza del percorso più breve (la "distanza ortodromica") tra due punti su una sfera, in particolare sulla superficie terrestre, considerando la curvatura del pianeta.

La formula è la seguente:

a=sin2(Δφ2)+cos(φ1)cos(φ2)sin2(Δλ2)a = \sin^2\left(\frac{\Delta \varphi}{2}\right) + \cos(\varphi_1) \cdot \cos(\varphi_2) \cdot \sin^2\left(\frac{\Delta \lambda}{2}\right)

c=2atan2(a,1a)c = 2 \cdot \text{atan2}\left(\sqrt{a}, \sqrt{1-a}\right)

d=Rcd = R \cdot c

Ora che abbiamo la formula, possiamo implementarla in PHP.


function calculateDistance($lat1, $lon1, $lat2, $lon2) {
    // Raggio della Terra in chilometri
    $radius = 6371;

    // Convertire le coordinate da gradi a radianti
    $lat1 = deg2rad($lat1);
    $lon1 = deg2rad($lon1);
    $lat2 = deg2rad($lat2);
    $lon2 = deg2rad($lon2);

    // Differenze di latitudine e longitudine
    $dLat = $lat2 - $lat1;
    $dLon = $lon2 - $lon1;

    // Applicare la formula di Haversine
    $a = sin($dLat / 2) * sin($dLat / 2) +
         cos($lat1) * cos($lat2) *
         sin($dLon / 2) * sin($dLon / 2);

    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

    // Calcolare la distanza finale
    $distance = $radius * $c;

    return $distance;
}

Supponiamo di voler calcolare la distanza tra due città, ad esempio Roma (41.9028° N, 12.4964° E) e Milano (45.4642° N, 9.1900° E). Possiamo chiamare la funzione calculateDistance passando le rispettive coordinate.


$latRome = 41.9028;
$lonRome = 12.4964;
$latMilan = 45.4642;
$lonMilan = 9.1900;

$distance = calculateDistance($latRome, $lonRome, $latMilan, $lonMilan);
echo "La distanza tra Roma e Milano è: " . $distance . " km";

Spiegazione del codice:

  1. Raggio della Terra: Abbiamo definito una variabile $radius con un valore di 6371 km, che è la lunghezza media del raggio terrestre.
  2. Conversione in radianti: Le coordinate geografiche (latitudine e longitudine) sono solitamente espresse in gradi. Tuttavia, per utilizzare la formula di Haversine, dobbiamo convertirle in radianti. Per questo usiamo la funzione PHP deg2rad().
  3. Calcolo della distanza: Utilizziamo la formula di Haversine per ottenere la distanza in chilometri tra i due punti.
  4. Risultato finale: La funzione restituisce la distanza in linea d'aria.

Considerazioni

  • Il raggio della Terra varia leggermente tra l'equatore e i poli. Tuttavia, l'approssimazione di 6371 km è generalmente abbastanza precisa per la maggior parte delle applicazioni.
  • Se si desidera migliorare l'accuratezza in alcuni contesti specifici, si può utilizzare il raggio polare (6356.8 km) o il raggio equatoriale (6378.1 km).

Conclusione

Calcolare la distanza in chilometri tra due coordinate con PHP è un'operazione relativamente semplice grazie alla formula di Haversine. Questa formula fornisce una stima accurata della distanza in linea d'aria, ideale per molte applicazioni che richiedono di lavorare con coordinate geografiche. Utilizzando il codice PHP fornito, è possibile implementare facilmente questa funzionalità in progetti che includono mappe, geolocalizzazione o calcoli di distanza tra città o punti di interesse.

Torna su