我想创建一个带有一些绘制圆圈的 Bokeh gmap 图,保存该图的 map 背景,然后在同一 map 背景上创建带有新圆圈的离线图。例如:
import bokeh.plotting as bk
from bokeh.models import GMapOptions
from bokeh.io import output_file, show, save
output_file('test.html', , mode='inline')
api_key = #insert your key here
mid_lat = 39.8283
mid_lon = 98.5795
map_options = GMapOptions(lat = mid_lat, lng = mid_lon, map_type="satellite", zoom=15)
lons = [mid_lon + 0.001, mid_lon - 0.001, mid_lon]
lats = [mid_lat + 0.001, mid_lat - 0.001, mid_lat]
p = bk.gmap(google_api_key = api_key, map_options = map_options)
p.circle(x = lons, y = lats, color = 'white')
save(p, 'test.html')
show(p)
现在,我想离线使用同一张 map 图像——缩放级别、x 和 y 域保持不变。但我想绘制新的圈子。例如:
lons = [mid_lon + 0.003, mid_lon - 0.003, mid_lon]
lats = [mid_lat + 0.003, mid_lat - 0.003, mid_lat]
有没有办法保存图形的背景图像并将其加载到新绘图中?看起来 GMap 似乎不支持这个,但是在 python 中是否有一个聪明的解决方法来做到这一点?
看来我可能需要保存自己的图 block 提供程序(如图 here 所示),但我认为我误解了执行此操作的正确方法,然后让 bokeh 离线重新访问图像/图 block 。但是,对于我的简单静态 map ,瓦片方法甚至可能不是合适的方法。
Python 3.6, Bokeh 12.7
请您参考如下方法:
如果你想保存例如整个地 block 的 PNG 图像,然后标准导出功能适用于 gmap 地 block 或 tile 提供者地 block :
from bokeh.io import export_png
export_png(p, "foo.png")
如果你的意思是你想要一个独立的 HTML 文件,里面有一个真实的(实时的) Bokeh 图,可以在没有访问网络的情况下显示 map ,这是不可能的。谷歌地图绘图始终需要访问完整的互联网,而图 block 提供商图需要访问图 block 服务器所在的任何网络。无法在 Bokeh HTML 输出中“嵌入” map 图 block 。
编辑:我想你可以制作一个没有轴、边框、标题等的图,并使用 export_png 来“保存背景”。然后,您可能需要加载 PNG 并将其转换为 RGBA numpy 数组以与 image_rgba 一起使用,以便在独立的 Bokeh HTML 文件中嵌入。相当多的工作,并且可能违反了 Google 的服务条款。
