我有一个
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多年来一直在做得很好(但现在不再存在链接了)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。