|
|
|
@ -7,9 +7,10 @@ from bokeh.layouts import column |
|
|
|
|
from bokeh.palettes import brewer |
|
|
|
|
from bokeh.plotting import figure, curdoc |
|
|
|
|
from bokeh.models import GeoJSONDataSource, Button, HoverTool, LinearColorMapper, LabelSet, ColumnDataSource |
|
|
|
|
from bokeh.tile_providers import get_provider #, Vendors |
|
|
|
|
from bokeh.tile_providers import get_provider |
|
|
|
|
from bokeh.transform import factor_cmap |
|
|
|
|
import time |
|
|
|
|
import urllib |
|
|
|
|
|
|
|
|
|
def lonlattowebmercator(df, lon="LON", lat="LAT"): |
|
|
|
|
k = 6378137 |
|
|
|
@ -20,8 +21,9 @@ def lonlattowebmercator(df, lon="LON", lat="LAT"): |
|
|
|
|
def getPositions(): |
|
|
|
|
## Get the live locations of the vehicles |
|
|
|
|
feed = gtfs_realtime_pb2.FeedMessage() |
|
|
|
|
response = requests.get('http://gtfs.ovapi.nl/nl/vehiclePositions.pb') |
|
|
|
|
response = requests.get('https://gtfs.ovapi.nl/nl/vehiclePositions.pb') |
|
|
|
|
feed.ParseFromString(response.content) |
|
|
|
|
print(feed) |
|
|
|
|
vehicle_positions = [] |
|
|
|
|
|
|
|
|
|
for entity in feed.entity: |
|
|
|
@ -39,7 +41,6 @@ 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)] |
|
|
|
|
print(df["longitude"]) |
|
|
|
|
Source.stream(df, rollover=len(df["longitude"])) |
|
|
|
|
labels = LabelSet(x='x',y='y',x_offset=5,y_offset=5,source=Source,render_mode='canvas') |
|
|
|
|
|
|
|
|
@ -64,5 +65,5 @@ p.add_tools(my_hover) |
|
|
|
|
|
|
|
|
|
p.circle('x', 'y', source=Source) |
|
|
|
|
curdoc().add_root(p) |
|
|
|
|
curdoc().add_periodic_callback(update,1000) |
|
|
|
|
curdoc().add_periodic_callback(update,5000) |
|
|
|
|
p.legend.location = "top_left" |
|
|
|
|