Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. # Standard Library
  2. from functools import partial
  3. import os
  4. # Third Party
  5. from bokeh.document import without_document_lock
  6. from bokeh.models import GMapPlot, GMapOptions, DataRange1d, ColumnDataSource, Circle, PanTool, WheelZoomTool, BoxSelectTool
  7. from bokeh.plotting import curdoc
  8. from concurrent.futures import ThreadPoolExecutor
  9. from tornado import gen
  10.  
  11. # gps update orchestrator
  12. @gen.coroutine
  13. @without_document_lock
  14. def gps_update():
  15. data = yield executor.submit(get_gps_points)
  16. doc.add_next_tick_callback(partial(update_gps_plots, data))
  17.  
  18.  
  19. def get_gps_points():
  20. return {'lat': [32.921, 32.932], 'lon': [-97.06, -97.07]}
  21.  
  22. @gen.coroutine
  23. def update_gps_plots(data):
  24. source.stream(data)
  25.  
  26.  
  27. def get_48_states():
  28. return GMapPlot(plot_width=900,
  29. plot_height=375,
  30. x_range=DataRange1d(),
  31. y_range=DataRange1d(),
  32. map_options=GMapOptions(lat=38.50, lng=-96.35, map_type="roadmap", zoom=4),
  33. api_key=api_key,
  34. webgl=True)
  35.  
  36. #init
  37. doc = curdoc()
  38. executor = ThreadPoolExecutor(max_workers=10)
  39. source = ColumnDataSource(data=dict(lat=[], lon=[]))
  40. # api key for google
  41. api_key = "api_key"
  42. # get a map
  43. map = get_48_states()
  44. # init circles
  45. circle = Circle(x="lon", y="lat", size=15, fill_color="blue", fill_alpha=0.8, line_color=None)
  46. # add circles based on source
  47. map.add_glyph(source, circle)
  48. # add tools
  49. map.add_tools(PanTool(), WheelZoomTool(), BoxSelectTool())
  50. # map to doc
  51. doc.add_root(map)
  52. # add callback
  53. doc.add_periodic_callback(gps_update, 1000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement