Distanza tra due punti sapendo latitudine, longitudine e altitudine
Ciao a tutti,
come calcolo la distanza tra due punti conoscendo la loro latitudine, longitudine e altitudine?
In rete ho trovato svariate formule che considerano o meno il raggio della Terra, ma non tengono conto però dell'altitudine (che a me invece interesserebbe).
Grazie a chi mi aiuterà!
come calcolo la distanza tra due punti conoscendo la loro latitudine, longitudine e altitudine?
In rete ho trovato svariate formule che considerano o meno il raggio della Terra, ma non tengono conto però dell'altitudine (che a me invece interesserebbe).
Grazie a chi mi aiuterà!
Risposte
Dipende da che distanza percorri sulla terra.
Tieni conto che un primo di latitudine sul meridiano e' pari a un miglio marino (1852m circa).
Lo stesso vale per l'equatore piu' o meno , quindi un primo di longitudine a una data longitudine sara' circa pari a un miglio, moltiplicato per il coseno della latitudine.
Se la distanza fra i due punti e' confrontabile con l'altitudine applchi Pitagora. Altrimenti, se i 2 punti sono lontani, la puoi trascurare.
Almeno cosi, di primo acchito
Tieni conto che un primo di latitudine sul meridiano e' pari a un miglio marino (1852m circa).
Lo stesso vale per l'equatore piu' o meno , quindi un primo di longitudine a una data longitudine sara' circa pari a un miglio, moltiplicato per il coseno della latitudine.
Se la distanza fra i due punti e' confrontabile con l'altitudine applchi Pitagora. Altrimenti, se i 2 punti sono lontani, la puoi trascurare.
Almeno cosi, di primo acchito
lat1Radians = lat1 * pi / 180;
lng1Radians = lng1 * pi / 180;
lat2Radians = lat2 * pi / 180;
lng2Radians = lng2 * pi / 180;
r = 6376.5 * 1000; //raggio della terra in metri
x1 = r *cos(lat1Radians) * cos(lng1Radians);
y1 = r * cos(lat1Radians) * sin(lng1Radians);
z1 = r * sin(lat1Radians);
x2 = r * cos(lat2Radians) * cos(lng2Radians);
y2 = r * cos(lat2Radians) * sin(lng2Radians);
z2 = r * sin(lat2Radians);
distanza = sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2);
Quindi se non ho capito male tu indendi calcolare la distanza come sopra e poi usare Pitagora nuovamente considerando come cateti la distanza di sopra e la differenza tra le due altitudini?
Esiste un calcolo più accurato? Nella mia applicazione avrei bisogno di calcoli non troppo approssimativi...
lng1Radians = lng1 * pi / 180;
lat2Radians = lat2 * pi / 180;
lng2Radians = lng2 * pi / 180;
r = 6376.5 * 1000; //raggio della terra in metri
x1 = r *cos(lat1Radians) * cos(lng1Radians);
y1 = r * cos(lat1Radians) * sin(lng1Radians);
z1 = r * sin(lat1Radians);
x2 = r * cos(lat2Radians) * cos(lng2Radians);
y2 = r * cos(lat2Radians) * sin(lng2Radians);
z2 = r * sin(lat2Radians);
distanza = sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2);
Quindi se non ho capito male tu indendi calcolare la distanza come sopra e poi usare Pitagora nuovamente considerando come cateti la distanza di sopra e la differenza tra le due altitudini?
Esiste un calcolo più accurato? Nella mia applicazione avrei bisogno di calcoli non troppo approssimativi...
Non si capisce nulla.
Poi non si capisce la distanza (se lineare o lungo la circonferenza.
Esempio stupido:
Punto di partenza: Latitudine 0 0'0" Longitudine 0 0' 0"
Punto di arrivo: Latitudine 1 0' 0" Longitudine 0 0' 0"
In pratica il punto si muove di un grado a Nord. La distanza percorsa (sulla terra) e' esattamente 60 miglia nautiche (108km circa).
Ora, se l'oggetto sta a 20m di altezza o anche a 200m, ha senso considerare questo dato?
Poi non si capisce la distanza (se lineare o lungo la circonferenza.
Esempio stupido:
Punto di partenza: Latitudine 0 0'0" Longitudine 0 0' 0"
Punto di arrivo: Latitudine 1 0' 0" Longitudine 0 0' 0"
In pratica il punto si muove di un grado a Nord. La distanza percorsa (sulla terra) e' esattamente 60 miglia nautiche (108km circa).
Ora, se l'oggetto sta a 20m di altezza o anche a 200m, ha senso considerare questo dato?
Chiarisco: parto da due punti di coordinate (lat1, lng1, alt1), (lat2, lng2, alt2).
L'obbiettivo è calcolare la distanza (lineare) percorsa da un velivolo.
In quanto ho scritto sopra converto latitudine e longitudine da gradi in radianti. A questo punto passo da coordinate polari a cartesiane e calcolo la distanza.
Successivamente (essendo interessato alla distanza lineare) dovrei usare nuovamente pitagora:
alt = alt1 - alt2;
distanza_tot = sqrt(alt^2 + distanza^2);
Le distanze iniziali tra i due punti sono piccole (dell'ordine dei metri) quindi il contributo dell'altritudine non sarebbe trascurabile.
L'obbiettivo è calcolare la distanza (lineare) percorsa da un velivolo.
In quanto ho scritto sopra converto latitudine e longitudine da gradi in radianti. A questo punto passo da coordinate polari a cartesiane e calcolo la distanza.
Successivamente (essendo interessato alla distanza lineare) dovrei usare nuovamente pitagora:
alt = alt1 - alt2;
distanza_tot = sqrt(alt^2 + distanza^2);
Le distanze iniziali tra i due punti sono piccole (dell'ordine dei metri) quindi il contributo dell'altritudine non sarebbe trascurabile.
Ma il problema e' banale allora.
Se $phi$ e' la longitudine e $theta$ la latitudine in gradi e h l'altezza rispetto al suolo
$x=(R+h)costhetacosphi$
$y=(R+h)costheta sinphi$
$z=(R+h)sinphi$
E la distanza lineare e' $d=sqrt((x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2)$
Se $phi$ e' la longitudine e $theta$ la latitudine in gradi e h l'altezza rispetto al suolo
$x=(R+h)costhetacosphi$
$y=(R+h)costheta sinphi$
$z=(R+h)sinphi$
E la distanza lineare e' $d=sqrt((x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2)$
Ti ringrazio, mi stavo solo complicando la vita con calcoli senza senso.