Python bokeh Google Maps基于缩放的动态字形大小

时间:2016-12-15 15:59:57

标签: python google-maps bokeh

是否可以在Python中使用基于缩放的动态大小在Circle()画布中绘制GMapPlot字形对象?我想显示一个圆形区域,其中我有中心点,半径以米为单位。我希望这个圆圈能够根据缩放谷歌地图以更小和更大的尺寸显示。

这可以通过某种方式实现吗?

更新 我可以使用以下代码绘制固定大小的圆圈:

from bokeh.document import Document
from bokeh.embed import file_html
from bokeh.resources import INLINE
from bokeh.models import (GMapPlot, GMapOptions, ColumnDataSource,
    Circle, DataRange1d, PanTool, WheelZoomTool, BoxSelectTool)

map_options = GMapOptions(lat=30.29, lng=-97.73, map_type="roadmap", zoom=11)

plot = GMapPlot(x_range=DataRange1d(), y_range=DataRange1d(), map_options=map_options,
    title="Austin", api_key=GOOGLE_API_KEY)

source = ColumnDataSource(data=dict(lat=[30.29, 30.20, 30.29],
    lon=[-97.70, -97.74, -97.78],))

circle = Circle(x="lon", y="lat", size=15, fill_color="blue", fill_alpha=0.8,
    line_color=None)

plot.add_glyph(source, circle)

plot.add_tools(PanTool(), WheelZoomTool(), BoxSelectTool())

# Save HTML file    
doc = Document()
doc.add_root(plot)

filename = './google_maps_test.html'

with open(filename, "w") as f:
    f.write(file_html(doc, INLINE, 'Google Maps plot'))

此处size=15表示在我滚动图表时不会改变的像素或某些固定大小...我的radius中可能有一个ColumnDataSource对象,其中值将是以米为单位的半径(例如,50,75,100)。我会使用size=radius ...

谢谢!

1 个答案:

答案 0 :(得分:2)

Circle字形接受sizeradius属性(其中之一)。默认情况下,size位于"屏幕单元" (像素,基本上)。这就是为什么它们保持相同的大小,无论缩放级别如何。如果您希望使用缩放级别缩放圆圈,则最好提供radius值,因为默认情况下radius被解释为数据空间单位" 。即在这种情况下,它将以米为单位(因为GMapPlot轴的单位是米)。

circle = Circle(x="lon", 
                y="lat", 

                # corresponds to 15 meters, so scales accordingly with zoom
                radius=15,         

                fill_color="blue", 
                fill_alpha=0.8,
                line_color=None)