martedì 24 gennaio 2012

Calcolare la distanza geodetica tra due punti

Due le coordinate in gradi decimali la distanza geodetica tra due punti si puo' calcolare con il metodo descritto qui

la traduzione in Python e' la seguente
-------------------------------------------------------------------------------

import math


def distanza(lat1,lon1,lat2,lon2):
    la1 = math.radians(lat1)
    la2 = math.radians(lat2)
    lo1 = math.radians(lon1)
    lo2 = math.radians(lon2)
    dLat = la1-la2
    dLon = lo1-lo2
    a = math.sin(dLat/2)*math.sin(dLat/2)+math.sin(dLon/2)*math.sin(dLon/2)* math.cos(la1) * math.cos(la2)
    c = 2*math.atan2(math.sqrt(a),math.sqrt(1-a))
    dist = 6378137*c
    return dist


print distanza(45,11,46,10)

-------------------------------------------------------------------------------
lo script calcola la distanza tra i due punti a coordinate lat=45°,lon=11° e lat=46°,lon=10° con il risultato di una distanza di 135786.09 metri.

L'errore di calcolo derivante dall'impiego della formula e' stimato in circa allo 0.3% il che equivale a 3 m per chilometro

Il valore di 6378137 m e' il raggio terrestre secondo il sistema WGS-84.

Il calcolo sopra ripòrtato e' impostato considerando la terra sferica; per una maggiore precisione e' necessario usare la formula ellissoidica di Vincenty (qui)