Salve a tutti, è un po' di tempo che sto cercando di capire come fare a calcolare la distanza tra 2 punti presi con il gps.
Fino ad adesso ho usato la formula di harvesine e funziona:
Codice PHP:
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
$earth_radius = 3960.00;
$delta_lat = $latitude2 - $latitude1 ;
$delta_lon = $longitude2 - $longitude1 ;
$alpha = $delta_lat/2 ;
$beta = $delta_lon/2 ;
$a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ;
$c = asin(min(1, sqrt($a)));
$distance = 2*$earth_radius * $c;
$distance = round($distance, 4);
$distance = $distance*1.609344;
return $distance;
}
Mi chiedevo però se tale formula tiene in considerazione l'altezza dei punti visto che io le passo solo lat e long, mi spiego meglio:
Prendo il gps e registro un punto al livello del mare, poi prendo una cabinovia ed arrivo a 2000 metri e registro l'altro punto.
Se la formula che uso non tiene conto dell'altezza tra i 2 punti ci sarà una distanza pari al cateto minore del triangolo (300) sotto e questa non è la reale distanza, quella reale sarebbe l'ipotenusa del triangolo.
codice:
2|\
0| \
0| \
0| \
|____\
300 metri
Tutte le formule che trovo in rete per il calcolo della distanza considerano solo latitudine e longitudine, esiste una formula che tiene conto anche dell'altezza? Ho trovato un abbozzo ma manca il raggio medio terrestre e non saprei come applicarla con latitudine longitudine ed altezza:
Codice PHP:
p = (long, lat, alt)
we calculate the equivalent Cartesian coordinates
p = (x, y, z)
as follows, where the asterisk denotes multiplication.
x = alt * cos(lat) * sin(long)
y = alt * sin(lat)
z = alt * cos(lat) * cos(long)
Now, given a pair of points
p0 = (x0, y0, z0)
p1 = (x1, y1, z1)
dist = sqrt( (x1-x0)^2 + (y1-y0)^2 + (z1-z0)^2 )
mi dareste una mano?