SevenhuijsenM
Initial commit with map
59d42eb
raw
history blame
2.71 kB
import gradio as gr
import plotly.graph_objects as go
import json
import requests
import os
API_KEY = os.getenv("API-KEY-TOMTOM")
api_params_incidents = {
'base_url': 'api.tomtom.com',
'API_KEY': "XyqEVsk8ELwIx6GGPMOqyAIE8dJ22vZM",
'min_lon': 18.00,
'max_lon': 18.16,
'min_lat': 59.25,
'max_lat': 59.40,
'version_number': 5,
'category_filter': '0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C14',
'time_validity_filter': 'present',
'language': 'en-GB',
'fields': '%7Bincidents%7Btype%2Cgeometry%7Bcoordinates%7D%2Cproperties%7Bid%2CmagnitudeOfDelay%2Cevents%7Bdescription%2Ccode%2CiconCategory%7D%2CstartTime%2CendTime%7D%7D%7D'
}
def get_incident_details(params):
url = f"https://{params['base_url']}/traffic/services/{params['version_number']}/incidentDetails?bbox={params['min_lon']}%2C{params['min_lat']}%2C{params['max_lon']}%2C{params['max_lat']}&fields={params['fields']}&language={params['language']}&categoryFilter={params['category_filter']}&timeValidityFilter={params['time_validity_filter']}&key={params['API_KEY']}"
return json.loads(requests.get(url).text)
def filter_map():
latitude_list = []
longitude_list = []
index_list = []
# Get the data from the json
incidents = get_incident_details(api_params_incidents)['incidents']
for (_, i) in enumerate(incidents):
print(i)
# Add the coordinates to the list
if any(isinstance(j, list) for j in i['geometry']['coordinates']):
latitude_list.append(i['geometry']['coordinates'][0][1])
longitude_list.append(i['geometry']['coordinates'][0][0])
else:
latitude_list.append(i['geometry']['coordinates'][1])
longitude_list.append(i['geometry']['coordinates'][0])
index_list.append(i['properties']['id'])
fig = go.Figure(go.Scattermapbox(
customdata=index_list,
lat=latitude_list,
lon=longitude_list,
mode='markers',
marker=go.scattermapbox.Marker(
size=6
),
hoverinfo="text",
hovertemplate='<b>Index</b>: %{customdata}'
))
fig.update_layout(
mapbox_style="open-street-map",
hovermode='closest',
mapbox=dict(
bearing=0,
center=go.layout.mapbox.Center(
lat=59.32,
lon=18.08
),
pitch=0,
zoom=9
),
)
return fig
with gr.Blocks() as demo:
with gr.Column():
btn = gr.Button(value="Update Filter")
map = gr.Plot()
demo.load(filter_map, outputs=map)
btn.click(filter_map, outputs=map)
demo.launch()