加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 如何计算GPX文件的距离?

发布时间:2020-12-16 08:03:05 所属栏目:百科 来源:网络整理
导读:我有一个 GPX file与GPS轨道。现在我想计算这个轨道覆盖的距离。 什么是最好的计算方法? 计算两点(GPX文件中的每对航点)之间的距离的传统方法是使用Haversine公式。 我有一个实现该算法的SQL Server函数。这应该很容易翻译成其他语言: create function dbo
我有一个 GPX file与GPS轨道。现在我想计算这个轨道覆盖的距离。

什么是最好的计算方法?

计算两点(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

这返回了里程的距离。对于公里,更换地球半径与公里相当。

Here是一个更深入的解释。

编辑:该功能足够快,足够准确,可以使用邮政编码数据库进行半径搜索。在this site多年来一直在做得很好(但现在不再存在链接了)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读