Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate distance from a GPX file?

Tags:

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?

like image 293
guerda Avatar asked Feb 20 '09 15:02

guerda


3 Answers

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).

like image 121
cdonner Avatar answered Sep 18 '22 09:09

cdonner


Mike Gavaghan has an algorithm for distance calculations on his site. There is a C# and also a JAVA version of the code.

like image 23
Marcel Avatar answered Sep 19 '22 09:09

Marcel


Delphi implementation of the Vincenty formulae can be found here.

like image 30
menjaraz Avatar answered Sep 22 '22 09:09

menjaraz