I have a GPX file with a GPS track. Now I want to calculate the distance I covered with this track.
What's the best way to calculate this?
The traditional way of calculating the distance between two points (each pair of waypoints in your GPX file) is with the Haversine formula.
I have a SQL Server function that implements the algorithm. This should be easy to translate into other languages:
create function dbo.udf_Haversine(@lat1 float, @long1 float, @lat2 float, @long2 float) returns float begin declare @dlon float, @dlat float, @rlat1 float, @rlat2 float, @rlong1 float, @rlong2 float, @a float, @c float, @R float, @d float, @DtoR float select @DtoR = 0.017453293 select @R = 3959 -- Earth radius select @rlat1 = @lat1 * @DtoR, @rlong1 = @long1 * @DtoR, @rlat2 = @lat2 * @DtoR, @rlong2 = @long2 * @DtoR select @dlon = @rlong1 - @rlong2, @dlat = @rlat1 - @rlat2 select @a = power(sin(@dlat/2), 2) + cos(@rlat1) * cos(@rlat2) * power(sin(@dlon/2), 2) select @c = 2 * atn2(sqrt(@a), sqrt(1-@a)) select @d = @R * @c return @d end
This returns the distance in Miles. For kilometers, replace the earth radius with it's km equivalent.
Here is a more in-depth explanation.
Edit: This function is fast enough and accurate enough for doing radius searches with a ZIP code database. It has been doing a great job on this site for years (but it no longer does, as the link is broken now).
Mike Gavaghan has an algorithm for distance calculations on his site. There is a C# and also a JAVA version of the code.
Delphi implementation of the Vincenty formulae can be found here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With