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 9

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More