使用python计算从gps轨迹点行进的距离[关闭]

Posted

技术标签:

【中文标题】使用python计算从gps轨迹点行进的距离[关闭]【英文标题】:Calculating distance travelled from gps track points using python [closed] 【发布时间】:2014-05-28 20:06:21 【问题描述】:

我有一个非常愚蠢的问题要问。我有这样一段旅程的 GPS 跟踪点:

863.3,2013-10-05T01:21:07Z,0,13.348841,77.686539  
863.3,2013-10-05T01:21:08Z,1,13.348841,77.686539  
863.3,2013-10-05T01:21:23Z,2,13.348708,77.686248  
861.1,2013-10-05T01:21:28Z,3,13.348647,77.686088  
867.0,2013-10-05T01:29:03Z,4,13.34732,77.682364

我只想找到行进的距离:我应该只考虑第一个轨迹点和最后一个轨迹点吗?还是我需要找到每个轨迹点之间的距离?

【问题讨论】:

这个问题似乎是题外话,因为它是关于几何的。 这取决于你。您提到的两个概念是distance and displacement。第一个点和最后一个点之间的长度是位移,每个点之间的长度之和就是距离。 这是有道理的。非常感谢。 【参考方案1】:

解析完 gps 点后,您需要提取每个点的纬度/经度点。您可以使用改编自here 的以下公式来获取每对点之间的距离,并将它们相加作为您的总距离。

import math

def getDistance(lat1,lon1,lat2,lon2):
    # This uses the haversine formula, which remains a good numberical computation,
    # even at small distances, unlike the Shperical Law of Cosines.
    # This method has ~0.3% error built in.
    R = 6371 # Radius of Earth in km

    dLat = math.radians(float(lat2) - float(lat1))
    dLon = math.radians(float(lon2) - float(lon1))
    lat1 = math.radians(float(lat1))
    lat2 = math.radians(float(lat2))

    a = math.sin(dLat/2) * math.sin(dLat/2) + \
        math.cos(lat1) * math.cos(lat2) * math.sin(dLon/2) * math.sin(dLon/2)

    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))

    d = R * c * 0.621371 # Converting km to miles with "* 0.621371"

    return d

请注意,此函数以英里为单位返回您的距离,但您可以通过从末尾删除“* 0.621371”来保持单位为(公里)。

当然,这些都是假设大圆线。您可能正在旅行某种网络,所以这肯定不准确。

【讨论】:

【参考方案2】:

为了估算您拥有的 GPS 跟踪点之间的行进距离,您肯定需要考虑所有连续点之间的距离。更准确地说,如果您有 N 个位置,则需要遍历所有位置并总结每个点 P_i 和 P_i+1 之间的距离(按记录时间排序)。

如果你只计算第一个点和最后一个点之间的距离,结果根本没有任何意义。想象一组 N 个点,这些点在移动代表一个大圆圈的轨道时被记录下来。第一个点和最后一个点几乎相同,因此距离非常小,即使您在圆圈中移动时经过的总距离要大得多。

但是,请注意,将连续点之间的距离相加仍然只是对总行驶距离的估计。根据您的轨道分辨率(即您的轨道位置提交的频率),与实际距离相比,精度可能会有很大差异。

【讨论】:

以上是关于使用python计算从gps轨迹点行进的距离[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

python 计算两个GPS点之间的距离。

如何使用陀螺仪和加速度计找到行进的距离?

查找表示 GPS 路线的两条线之间的距离(MATLAB、Java、C++ 或 Python)

在 Android 手机中计算与 GPS 距离的最佳方法是啥?

在给定点、方位角和距离的情况下计算 gps 坐标

如何在swift 3.0中计算用户从当前位置行进的距离