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/;
  
$beta      $delta_lon/;
 
  
$a        sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ;
  
$c        asin(min(1sqrt($a)));
  
$distance 2*$earth_radius $c;
  
$distance round($distance4);
  
$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:

= (longlatalt)

we calculate the equivalent Cartesian coordinates

= (xyz)

as 
followswhere the asterisk denotes multiplication.

 
alt cos(lat) * sin(long)
 
alt sin(lat)
 
alt cos(lat) * cos(long)

Nowgiven a pair of points

 p0 
= (x0y0z0)
 
p1 = (x1y1z1)

dist sqrt( (x1-x0)^+ (y1-y0)^+ (z1-z0)^
mi dareste una mano?