Adding the duration and distance aggregation from the routes api

This commit is contained in:
Kadir 2024-02-29 19:58:54 +01:00
parent ce9956ea52
commit 83b3f1d3fd
2 changed files with 119 additions and 75 deletions

View file

@ -1,70 +1,84 @@
{ {
"routes": [ "routes": [
{
"legs": [
{ {
"stepsOverview": { "legs": [
"multiModalSegments": [ {
{ "steps": [
"stepStartIndex": 0, {
"stepEndIndex": 2, "distanceMeters": 6,
"navigationInstruction": { "staticDuration": "5s",
"instructions": "Walk to Finsbury Park" "travelMode": "WALK"
}, },
"travelMode": "WALK" {
}, "distanceMeters": 158,
{ "staticDuration": "133s",
"stepStartIndex": 3, "travelMode": "WALK"
"stepEndIndex": 3, },
"navigationInstruction": { {
"instructions": "Subway towards Brixton" "distanceMeters": 19,
}, "staticDuration": "16s",
"travelMode": "TRANSIT" "travelMode": "WALK"
}, },
{ {
"stepStartIndex": 4, "distanceMeters": 102,
"stepEndIndex": 4, "staticDuration": "87s",
"navigationInstruction": { "travelMode": "WALK"
"instructions": "Walk to Euston" },
}, {
"travelMode": "WALK" "staticDuration": "30s",
}, "travelMode": "WALK"
{ },
"stepStartIndex": 5, {
"stepEndIndex": 5, "distanceMeters": 133,
"navigationInstruction": { "staticDuration": "60s",
"instructions": "Subway towards Morden via Bank" "travelMode": "WALK"
}, },
"travelMode": "TRANSIT" {
}, "distanceMeters": 5202,
{ "staticDuration": "392s",
"stepStartIndex": 6, "travelMode": "TRANSIT"
"stepEndIndex": 6, },
"navigationInstruction": { {
"instructions": "Walk to Bank Station" "distanceMeters": 21,
}, "staticDuration": "30s",
"travelMode": "WALK" "travelMode": "WALK"
}, },
{ {
"stepStartIndex": 7, "distanceMeters": 5627,
"stepEndIndex": 7, "staticDuration": "600s",
"navigationInstruction": { "travelMode": "TRANSIT"
"instructions": "Light rail towards Woolwich Arsenal" },
}, {
"travelMode": "TRANSIT" "distanceMeters": 45,
}, "staticDuration": "60s",
{ "travelMode": "WALK"
"stepStartIndex": 8, },
"stepEndIndex": 9, {
"travelMode": "WALK" "distanceMeters": 10907,
} "staticDuration": "1320s",
] "travelMode": "TRANSIT"
} },
{
"distanceMeters": 63,
"staticDuration": "64s",
"travelMode": "WALK"
},
{
"distanceMeters": 70,
"staticDuration": "54s",
"travelMode": "WALK"
},
{
"distanceMeters": 85,
"staticDuration": "73s",
"travelMode": "WALK"
}
]
}
],
"distanceMeters": 22438,
"duration": "3463s",
"staticDuration": "3463s"
} }
], ]
"distanceMeters": 22438, }
"duration": "3463s",
"staticDuration": "3463s"
}
]
}

View file

@ -1,5 +1,6 @@
import requests import requests
from utils import nextMonday from utils import nextMonday
from collections import defaultdict
API_KEY = 'AIzaSyBoBHzeQFgR7O-NlNsuHXQcC1B7ccEHpl8' API_KEY = 'AIzaSyBoBHzeQFgR7O-NlNsuHXQcC1B7ccEHpl8'
url = "https://routes.googleapis.com/directions/v2:computeRoutes" url = "https://routes.googleapis.com/directions/v2:computeRoutes"
@ -11,7 +12,7 @@ def travel_time(origin_lat:float, origin_lon:float, dest_lat:float, dest_lon:flo
header = { header = {
"X-Goog-Api-Key": API_KEY, "X-Goog-Api-Key": API_KEY,
"Content-Type": "application/json", "Content-Type": "application/json",
"X-Goog-FieldMask": "routes.distanceMeters,routes.duration,routes.staticDuration,routes.legs.stepsOverview", "X-Goog-FieldMask": "routes.distanceMeters,routes.duration,routes.staticDuration,routes.legs.steps.distanceMeters,routes.legs.steps.staticDuration,routes.legs.steps.travelMode",
} }
body = { body = {
@ -50,11 +51,40 @@ def travel_time(origin_lat:float, origin_lon:float, dest_lat:float, dest_lon:flo
raise Exception(r.json()) raise Exception(r.json())
if __name__ == "__main__": def extract_time(d):
origin = 51.5635664310333, -0.1107173751570373 # home r = d['routes'][0]
dest = 51.50475678313417, 0.04915321000190009 # london city airport print(r.keys())
d = travel_time(origin[0], origin[1], dest[0], dest[1]) distance = r['distanceMeters']
import json duration = r['duration']
with open('code/json/routing_routeapi2.json', 'w') as f: duration_static = r['staticDuration']
json.dump(d, f)
steps = r['legs'][0]['steps']
# print(steps)
duration_per_transit = defaultdict(lambda: 0)
distance_per_transit = defaultdict(lambda: 0)
for step in steps:
duration_per_transit[step['travelMode']] += int(step['staticDuration'].strip('s'))
distance_per_transit[step['travelMode']] += step.get('distanceMeters', 0)
print(f"dis {distance}, dur {duration}, duration per transit {dict(duration_per_transit)}, distance per transit {dict(distance_per_transit)}")
if __name__ == "__main__":
import json
with open('code/json/routing_routeapi.json', 'r') as f:
d = json.load(f)
extract_time(d)
# if __name__ == "__main__":
# origin = 51.5635664310333, -0.1107173751570373 # home
# dest = 51.50475678313417, 0.04915321000190009 # london city airport
# d = travel_time(origin[0], origin[1], dest[0], dest[1])
# import json
# with open('code/json/routing_routeapi.json', 'w') as f:
# json.dump(d, f)