在Bokeh上的Replot Google地图离线

时间:2018-09-17 17:08:14

标签: python google-maps bokeh

我想用一些绘制的圆创建一个bokeh gmap图形,保存该图形的地图背景,然后在同一地图背景上用新圆创建离线图形。例如:

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)

给出以下内容,在地图上绘制三个白点: enter image description here

现在,我想离线使用同一张地图图像-缩放级别,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中有一个聪明的解决方法吗?

似乎我可能需要保存自己的图块提供程序(如here所示),但是我认为我误解了这样做的正确方法,然后让bokeh脱机重新访问图像/图块。但是,平铺方法甚至可能不是我制作简单静态地图的方法。

Python 3.6,Bokeh 12.7

1 个答案:

答案 0 :(得分:1)

如果您要保存例如整个图的PNG图片,然后标准导出功能可同时用于gmap图或图块提供者图:

from bokeh.io import export_png
export_png(p, "foo.png")

如果您要的是一个独立的HTML文件,其中包含真实的(实时)Bokeh图,它可以显示地图图而无需访问网络,那么这是不可能的。 Google地图地块始终需要访问整个Internet,而图块提供商地块则需要访问该图块服务器所在的任何网络。无法在“散景” HTML输出中“嵌入”地图图块。


编辑:我想您可以制作一个没有轴,边框,标题等的图形,并使用export_png“保存背景”。然后,您可能需要加载PNG并将其转换为RGBA numpy数组以与image_rgba一起使用,以便嵌入独立的Bokeh HTML文件。大量工作,并有可能违反Google的服务条款。