1.取输入道路的每10min,或者20min,或者30min的平均速度和经过车辆数
def qushu(tablenames,filename1):
result = []
for table_name in tablenames:
print(table_name)
sql_str = "SELECT AVG(\"VELOCITY\"), count(*), count(distinct \"TM_SERIAL\") AS COUNT_TM, " \
"TIMESTAMP WITH TIME ZONE \'epoch\' + " \
"INTERVAL '1 second' * round(extract(\'epoch\' from \"ctime\") / 600) * 600 as timestamp " \
"FROM public.\"{0}\" "\
"where \"osm_id_new\" >= {1} and \"osm_id_new\" <= {2} " \
"GROUP BY timestamp".format(table_name,start_road,end_road)
print(sql_str)
cursor.execute(sql_str)
rows = cursor.fetchall()
for row in rows:
result.append(row)
with open(filename1,'a',newline='') as f:
csv_writer = csv.writer(f)
for i in result:
csv_writer.writerow(i)
2.对取出的数进行处理,取出每个时间段的 前一个时间段和后一个时间段的 速度和车辆数
def parsedata(contents,filename2):
result1 = []
for i in contents:
content = i.replace("\n","").split(',')
list1 = []
avg_velocity = content[0]
count_tm = content[2]
time = content[3].replace("+08:00","")
time = datetime.datetime.strptime(time,'%Y-%m-%d %H:%M:%S')
hour = time.hour
minute = time.minute
hour_minute = int(hour)*6 + int(minute)/10
list1.append(content[3])
list1.append(time)
list1.append(avg_velocity)
list1.append(count_tm)
list1.append(hour)
list1.append(minute)
list1.append(hour_minute)
result1.append(list1)
changdu = len(result1)
result2 = []
for i, val in enumerate(result1):
hour_minute = val[6]
if(i == 0):
if((hour_minute + 1) == result1[i+1][6]):
#与下一个时间点连续
avg_velocity_qian = val[2]
avg_velocity_hou = result1[i+1][2]
count_tm_qian = val[3]
count_tm_hou = result1[i+1][3]
else:
avg_velocity_qian = val[2]
avg_velocity_hou = val[2]
count_tm_qian = val[3]
count_tm_hou = val[3]
val.append(float(avg_velocity_qian))
val.append(float(avg_velocity_hou))
val.append(int(count_tm_qian))
val.append(int(count_tm_hou))
result2.append(val)
elif(i == changdu-1):
if(hour_minute == result1[i-1][6]):
#与上一个时间点连续
avg_velocity_qian = avg_velocity_qian = result1[i-1][2]
a