2016-12-15 52 views
0

在Python散景中可以用基於縮放的動態尺寸在GMapPlot畫布上繪製Circle()字形對象嗎?我想顯示一個圓形區域,其中有中心點和半徑(米)。我希望根據縮放Google地圖,以更小和更大的尺寸顯示此圈子。Python散景谷歌地圖基於變焦的動態字形尺寸

這可以通過某種方式實現嗎?


UPDATE: 我可以繪製固定大小的圓形用下面的代碼:

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意味着像素或一些固定尺寸時,我滾動圖,其不改變...我可以在我的ColumnDataSource對象中有一個radius,其中值將以米爲單位的半徑(例如50,75,100)。我會用size=radius ...

謝謝!

+0

你已經試過了什麼? – bigreddot

+0

我用示例代碼更新了我的問題... – ragesz

回答

1

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) 
+0

非常感謝,它完美的工作!!!!! – ragesz

+0

在我的真實代碼中,我想使用'CircleX',但它沒有'radius'屬性:((''AttributeError:給CircleX'的意外屬性'radius'當然'Circle'也可以做我的工作... – ragesz

+0

對,只有'Circle'具有'radius'(支持氣泡圖),所有其他標記都是「散佈」標記,並且只支持'size'。 – bigreddot