[tips] Calcolare la distanza tra punti espressi in latitudine e longitudine
Rappresentando il punto A con la coppia (a1,b1) in cui a1 è la longitudine e b1 è la latitudine ed punto B con la coppia (a2,b2), la distanza tra A e B è data dalla formula:
d(A,B) = arccos(cos(a1-a2)cos(b1)cos(b2)+sin(b1)sin(b2))
che fornisce la distanza in radianti, o raggi terrestri.
I valori di latitudine e longitudine che solitamente vengono ricavati dai servizi di localizzazione (tipo Google Maps) sono espressi in gradi. Questi valori devono essere convertiti in radianti. Il rapporto tra gradi e radianti è ricavabile assumendo che l’angolo giro (360°) è 2 π rad, quindi 1°=π/180. Per questo, se si vuole utilizzare le coordinate espresse in gradi, queste vanno moltiplicate per π/180.
A questo punto basta moltiplicare il risultato per 6378 (misura del raggio terrestre in Km) per ottenere la distanza in km.
Volendo rappresentare la formula in SQL Server
DECLARE @@A_LONG FLOAT
DECLARE @@A_LAT FLOAT
DECLARE @@B_LONG FLOAT
DECLARE @@B_LAT FLOAT
SET @@A_LONG=11.537919 *(PI()/180) --Longitudine del primo punto
SET @@A_LAT=45.336502 *(PI()/180) --Latitudine del primo punto
SET @@B_LONG=11.536503 *(PI()/180) --Longitudine del secondo punto
SET @@B_LAT=45.336487*(PI()/180) --Latitudine del secondo punto
SELECT (ACOS(cos(@@A_LONG-@@B_LONG)*cos(@@A_LAT)*cos(@@B_LAT)+sin(@@A_LAT)*sin(@@B_LAT)))*6378
dove il punto A ha latitudine @@A_LAT e longitudine @@A_LONG, il punto B ha latitudine @@B_LAT e longitudine @@B_LONG. In Microsft SQL Server, PI() è la funzione che restituisce il valore della costante pi greco (π).
Una variante alla formula sopra riportata è questa:
DECLARE @@A_LONG FLOAT
DECLARE @@A_LAT FLOAT
DECLARE @@B_LONG FLOAT
DECLARE @@B_LAT FLOAT
SET @@A_LONG=11.536567 --Longitudine del primo punto
SET @@A_LAT=45.336581 --Latitudine del primo punto
SET @@B_LONG=11.536846 --Longitudine del secondo punto
SET @@B_LAT=45.33818 --Latitudine del secondo punto
select
acos(cos(@@A_LONG * (PI()/180)) *
cos(@@A_LAT * (PI()/180)) *
cos(@@B_LONG * (PI()/180)) *
cos(@@B_LAT * (PI()/180))
+
cos(@@A_LONG * (PI()/180)) *
sin(@@A_LAT * (PI()/180)) *
cos(@@B_LONG * (PI()/180)) *
sin(@@B_LAT * (PI()/180))
+
sin(@@A_LONG * (PI()/180)) *
sin(@@B_LONG * (PI()/180))
) * 6378 as Dist
Questo sito (itouchmap.com) consente di determinare latitudine e longitudine di un punto geografico in modo semplice.