一尘不染

如何计算与GPX文件的距离?

algorithm

我有一个带有GPS轨迹的GPX文件。现在,我要计算此轨道覆盖的距离。

计算此的最佳方法是什么?


阅读 194

收藏
2020-07-28

共1个答案

一尘不染

计算两点(GPX文件中的每对航点)之间距离的传统方法是使用Haversine公式。

我有一个实现该算法的SQL Server函数。这应该很容易翻译成其他语言:

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

这将返回以英里为单位的距离。对于千米,用等效的km代替地球半径。

是更深入的解释。

编辑:此功能足够快且足够准确,可以使用邮政编码数据库进行半径搜索。多年来,它一直在此站点上做得很好(但是现在不再有效,因为该链接现在已断开)。

2020-07-28