Speed and Heading calculation starting from GPS coordinate

Simple tool for the calculation of Speed and heading starting from Latitude and Longitude.


//Thanks to darcas.net/index.php/2008/10/12/calcolo-della-distanza-tra-due-punti-geografici/
 
Function SpeedAndHeading(TimeWv, LatWv, LonWv) 
 
Wave TimeWv, LatWv, LonWv
 
Duplicate/O TimeWv, Speed_Knot
Duplicate/O TimeWv, Speed_m_s
Duplicate/O TimeWv, Heading
 
Variable i,  z1, z2, HeadTmp
 
For(i=0;i<=NumPnts(TimeWv);i+=1)
    
    //Speed Calculation
    Speed_m_s[i] = (1000 * ( ACOS(SIN(Rad(latWv[i]))*SIN(Rad(latWv[i+1]))+COS(Rad(latWv[i]))*COS(Rad(latWv[i+1]))*COS(Rad(lonWv[i+1])-Rad(lonWv[i])))*6372.795477598))/(timeWv[i+1]-TimeWv[i])      
    Speed_Knot[i] = Speed_m_s[i] / 0.514444
    
    //heading Calculation
    Z1 = SIN(Rad(lonWv[i+1]) - Rad(lonWv[i])) * cos(Rad(latWv[i+1]))    
    Z2 = Cos(Rad(LatWv[i])) * Sin(Rad(LatWv[i+1])) - Sin(Rad(LatWv[i])) * Cos(Rad(LatWv[i+1])) * Cos(Rad(LonWv[i+1]) - Rad(LonWv[i]))   
    HeadTmp = (Grad( Atan2(Z1, Z2)))
    Heading[i] = (HeadTmp < 0) ? HeadTmp+360 : HeadTmp
    
EndFor
 
End
 
Function Rad(Gr)
Variable Gr
 
Return (PI * Gr /180)
 
End
 
Function Grad(Rad)
Variable Rad
 
Return (180 * Rad / Pi)
 
End
Cool. You are aware though that NMEA sentences already include speed and heading information?

regards,
Andy

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More