|
|
|
@ -23,7 +23,6 @@ def getPositions(): |
|
|
|
|
feed = gtfs_realtime_pb2.FeedMessage() |
|
|
|
|
response = requests.get('https://gtfs.ovapi.nl/nl/vehiclePositions.pb') |
|
|
|
|
feed.ParseFromString(response.content) |
|
|
|
|
print(feed) |
|
|
|
|
vehicle_positions = [] |
|
|
|
|
|
|
|
|
|
for entity in feed.entity: |
|
|
|
@ -40,10 +39,17 @@ def update(): |
|
|
|
|
|
|
|
|
|
## Merge tables |
|
|
|
|
df = df_vehiclePositions.merge(df_routes, on="route_id", how="right") |
|
|
|
|
df = df[(df["route_type"]==1) | (df["route_type"]==2) | (df["route_type"]==3)] |
|
|
|
|
df = df[df["route_type"]!=2] |
|
|
|
|
df = add_route_types(df, route_translation) |
|
|
|
|
Source.stream(df, rollover=len(df["longitude"])) |
|
|
|
|
labels = LabelSet(x='x',y='y',x_offset=5,y_offset=5,source=Source,render_mode='canvas') |
|
|
|
|
|
|
|
|
|
def add_route_types(df, route_translation): |
|
|
|
|
df['route_type_long'] = [route_translation[key] for key in df['route_type']] |
|
|
|
|
df['color'] = [brewer['Set1'][9][key] for key in df['route_type']] |
|
|
|
|
return(df) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Get initial values |
|
|
|
|
df_vehiclePositions = getPositions() |
|
|
|
@ -51,6 +57,9 @@ df_routes = pd.read_csv("gtfs-data/routes.txt") |
|
|
|
|
|
|
|
|
|
## Merge tables |
|
|
|
|
df = df_vehiclePositions.merge(df_routes, on="route_id", how="right") |
|
|
|
|
df = df[df["route_type"]!=2] |
|
|
|
|
route_translation = {0:"Tram", 1:"Metro", 2:"Rail", 3:"Bus", 4:"Ferry"} |
|
|
|
|
df = add_route_types(df,route_translation) |
|
|
|
|
Source = ColumnDataSource(df) |
|
|
|
|
|
|
|
|
|
## Plot |
|
|
|
@ -60,10 +69,10 @@ OSM = get_provider('OSM') |
|
|
|
|
p = figure(title="A gtfs feed",x_range=x_range, y_range=y_range, x_axis_type='mercator',y_axis_type='mercator',sizing_mode='stretch_both',plot_width=1500,plot_height=1000) |
|
|
|
|
p.add_tile(OSM) |
|
|
|
|
my_hover=HoverTool() |
|
|
|
|
my_hover.tooltips=[('route_id','@route_id'),('Type','@route_type'),('Route','@route_long_name')] |
|
|
|
|
p.add_tools(my_hover) |
|
|
|
|
my_hover.tooltips=[('Type','@route_type_long'),('Route id','@route_short_name'),('Route','@route_long_name')] |
|
|
|
|
|
|
|
|
|
p.circle('x', 'y', source=Source) |
|
|
|
|
p.add_tools(my_hover) |
|
|
|
|
p.circle('x', 'y', source=Source, legend_field='route_type_long', color='color') |
|
|
|
|
curdoc().add_root(p) |
|
|
|
|
curdoc().add_periodic_callback(update,5000) |
|
|
|
|
p.legend.location = "top_left" |
|
|
|
|