How to calculate distance from a GPX file? How to calculate distance from a GPX file? xml xml

How to calculate distance from a GPX file?


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.