我有这个非常愚蠢的问题要问。我有这样的旅程的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
我想要的只是找到行进的距离:我应该只考虑第一个跟踪点和最后一个跟踪点吗?或者我是否需要找到每个跟踪点之间的距离?
答案 0 :(得分:2)
解析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"从最后开始。
当然,这些假设是很好的圆圈线。你可能正在旅行某种网络,所以这肯定不是真实的世界。
答案 1 :(得分:1)
为了估算您拥有的GPS轨迹点之间的行进距离,您肯定需要考虑所有连续点之间的距离。更准确地说,如果你有N个位置,你需要迭代你拥有的所有位置,并总结每个点P_i和P_i + 1之间的距离(按记录时间排序)。
如果你只计算第一个和最后一个点之间的距离,结果就没有任何意义了。想象一下在移动代表大圆的轨道时记录的一组N个点。第一点和最后一点几乎相同,因此导致距离非常小,即使您在圆圈中移动时的总距离明显更大。
但是,请注意,总计连续点之间的距离仍然只是对行进总距离的估计。根据您的曲目的分辨率(即,提交曲目位置的频率),与实际距离相比的准确度可能会有很大差异。