bmtc/scripts/router.py
2018-11-11 15:42:50 +05:30

81 lines
2.7 KiB
Python

import csv
import json
import time
import datetime
# Take routes, find first_departure, first_arrival, last_departure, last_arrival, duration and avg speed
i = csv.DictReader(open('data/routes.2018.csv', 'r'))
newrow = {
'type': 'FeatureCollection',
'features': []
}
for row in i:
feature = {
'type': 'Feature',
'properties': {},
'geometry': {
'type': 'LineString',
'coordinates': []
}
}
feature['properties']['route'] = row['route_no']
feature['properties']['origin'] = row['origin']
feature['properties']['destination'] = row['destination']
departures_origin = row['departure_from_origin'].split(',')
arrivals_origin = row['arrival_at_origin'].split(',')
departures_destination = row['departure_from_destination'].split(',')
arrivals_destination = row['arrival_at_destination'].split(',')
first_departure = departures_origin[0].strip(' ')
# if first_departure.startswith("00"):
# first_departure = departures_origin[1].strip(' ')
feature['properties']['first_departure'] = first_departure
feature['properties']['last_departure'] = departures_origin[-1].strip(' ')
for arrival in arrivals_destination:
first_arrival = arrival.strip(' ')
if ((int(first_arrival.split(':')[0])) < int(first_departure.split(':')[0])):
continue
else:
break
feature['properties']['first_arrival'] = first_arrival
feature['properties']['last_arrival'] = arrivals_destination[-1].strip(' ')
feature['properties']['trips'] = len(departures_origin) + len(departures_destination)
start = time.strptime(feature['properties']['first_departure'], '%H:%M')
end = time.strptime(feature['properties']['first_arrival'], '%H:%M')
start_seconds = datetime.timedelta(hours=start.tm_hour, minutes=start.tm_min, seconds=start.tm_sec).total_seconds()
end_seconds = datetime.timedelta(hours=end.tm_hour, minutes=end.tm_min, seconds=end.tm_sec).total_seconds()
difference = end_seconds - start_seconds
if (difference < 0):
duration = (difference/3600) + 24
else:
duration = (difference/3600)
feature['properties']['duration'] = duration
distance = float(row['distance'].split(' ')[0])
feature['properties']['distance'] = distance
feature['properties']['speed'] = distance/duration
try:
bus_stops = json.loads(row['map_json_content'])
for stop in bus_stops:
coordinates = [float(stop['latlons'][1]), float(stop['latlons'][0])]
feature['geometry']['coordinates'].append(coordinates)
newrow['features'].append(feature)
except:
pass
print json.dumps(newrow)