frombokeh.documentimportDocumentfrombokeh.embedimportfile_htmlfrombokeh.modelsimport(BoxZoomTool,PanTool,Plot,Range1d,WheelZoomTool,WMTSTileSource)frombokeh.resourcesimportINLINEfrombokeh.util.browserimportview# set to roughly full extent of web mercator projectionx_range=Range1d(start=-200000,end=2000000)y_range=Range1d(start=800000,end=7000000)# create tile source from templated urltile_options={}tile_options['url']='http://c.tile.openstreetmap.org/{z}/{x}/{y}.png'tile_source=WMTSTileSource(**tile_options)# instantiate plot and add tile sourcep=Plot(x_range=x_range,y_range=y_range,height=800,width=800)p.add_tools(WheelZoomTool(),PanTool(),BoxZoomTool(match_aspect=True))tile_renderer_options={}p.add_tile(tile_source,**tile_renderer_options)doc=Document()doc.add_root(p)if__name__=="__main__":doc.validate()filename="tile_source.html"withopen(filename,"w")asf:f.write(file_html(doc,INLINE,"Tile Source Example"))print(f"Wrote {filename}")view(filename)