我正在研究一个python脚本,以获得一个点到下一个点之间的速度。我已经创建了这个功能(见下文),并在我测试时工作,但现在我知道它有效并且想要使用它,我遇到了障碍。我似乎找不到计算每个点之间的时间的方法,并使用numpy
将其保存为数组。我的文件有数百个不同的点。
def speed(lat1, long1, time1, lat2, long2, time2):
distance = haversine_distance(lat1, long1, lat2, long2) # meter
delta_time = time2 - time1 # second
speed = distance / delta_time # speed in m/s
speed = speed * 3.6 # speed in km/h
return speed
每个点的时间戳采用以下格式:
timestamp.roundHr
12/8/2009 7:00
12/8/2009 8:00
12/8/2009 9:00
12/8/2009 10:00
答案 0 :(得分:2)
您有时间戳1和时间戳2。首先,使用each创建一个datetime对象,然后通过从另一个中减去一个来获得delta时间:
from datetime import datetime as dt
def speed(lat1, long1, time1, lat2, long2, time2):
distance = haversine_distance(lat1, long1, lat2, long2) # meter
# here's the fun stuff
time1 = dt.strptime(time1, "%m/%d/%Y %H:%M")
time2 = dt.strptime(time2, "%m/%d/%Y %H:%M")
delta_time = (time2 - time1).total_seconds() # second
# continue with the rest of your code
speed = (distance / delta_time) # speed in m/s
speed = speed * 3.6 # speed in km/h
return speed
如果您的时间戳列表包含n
元素,并且您想要计算不同的n-1
元素列表,那么新列表中的i
元素是增量时间在旧列表中的i
和i+1
元素之间,这应该有效:
def computeDeltaTimes(L):
answer = []
a, b = itertools.tee(L)
next(B, None)
fmt = "%m/%d/%Y %H:%M"
for start, end in zip(a,b): # or itertools.izip in python2
answer.append((dt.strptime(end, fmt) - dt.strptime(start, fmt)).total_seconds())
return answer