Calcolo della distanza tra due punti geografici

Tutti i sistemi GPS sono in grado di calcolare la distanza che intendiamo percorrere. Lo stesso Google Earth fa lo stesso, una volta indicati i due punti sulla superficie del globo.

Qualche tempo fa mi è nata l’esigenza di calcolare la distanza tra due punti geografici, di cui conoscevo le coordinate. All’inizio ho pensato che probabilmente c’era già qualche API da qualche parte che facesse questo tipo di elaborazione; poi mi sono fermato e mi sono detto: perché non me lo realizzo da solo?

A scuola ho studiato Trigonometria sferica, ed avevo letto anche qualcosa sulle geodetiche, che senza entrare troppo nello specifico, altro non sono che la traiettoria più breve fra punti di un particolare spazio. Dopo aver dato una rispolverata alle varie formule matematiche di cui avevo bisogno, ho iniziato la fase di analisi vera e propria; e qui voglio illustrarla, per poi far seguire il codice in PHP.

Ci sono due premesse da fare. La prima è che in realtà la Terra non è sferica (è simile ad uno sferoide oblato) ma per semplicità di calcolo ho assunto che lo fosse, anche perché l’errore generato è molto trascurabile (per i miei utilizzi). La seconda è che il raggio della Terra cambia a seconda da dove viene misurato, per cui per semplicità ho adottato il raggio quadratico medio, che è pari a 6372,795477598 chilometri.

Dopo aver disegnato una sfera e due punti su di essa e tutte le linee ed aver individuato i punti, ho iniziato a buttare giù qualche formula per capire di che dati avevo bisogno ed in che formato.

Calcolo coordinate

Sicuramente avevo bisogno della latitudine e longitudine sia del punto A che del punto B. Ma in che formato?

I punti io li ho in gradi, mentre la formula li necessita in radianti. La conversione viene fatta moltiplicando la coordinata per π e poi dividendo il risultato per 180.

Da questo punto in poi le coordinate sono sempre utilizzate in radianti.

Inoltre non avevo l’angolo φ. Esso è uguale al valore assoluto della differenza tra la longitudine A e la longitudine B.

Ora manca solo l’angolo P che è uguale all’arcocoseno del prodotto del seno della latitudine A con il seno della latitudine B, più il prodotto del coseno della latitudine A col coseno della latitudine B col coseno di φ.

Una volta fatto questo, per calcolare la distanza mi basta moltiplicare il valore del punto P per il raggio quadratico medio terrestre (ovviamente, se il raggio quadratico medio terrestre è espresso in chilometri, il risultato sarà in chilometri).

Volendo schematizzare il tutto possiamo avere qualcosa del tipo:

Trasformare tutto in una funzione PHP è molto semplice arrivati a questo punto, anche grazie alla funzioni implementate all’interno del linguaggio stesso; e mi riferisco a quelle matematiche.

Una funzione ipotetica che riceve come parametri le coppie di coordinate latitudine e longitudine (separate da virgola) dei due punti terrestri potrebbe essere la seguente:

A questo punto una semplice richiesta va evocata nel seguente modo:

In questo caso ho provato a calcolare la distanza tra il Colosseo e la Torre Eiffel. Il risultato della funzione, 1.109,74 Km si discosta di soli 0,22 Km rispetto alla distanza calcolata da Google Earth; un valore accettabile considerando le limitazioni elencate all’inizio di questo articolo.

Add a Comment