我是散景图的新手,我正在尝试用滑块绘制地图,但它没有更新。
我已经尝试了很多方法,但它仍然没有更新情节。
我正在使用散景服务器和非地理图我已经得到它......
我正在做的是:
def get_dataset(dataframe,column,geometry_column,val):
g = geodataframe[geodataframe[column] == val]
g_gdf = gpd.GeoDataFrame(g, geometry=geometry_column)
g_gdf.crs = 'EPSG:3857'
return g_gdf
(此函数接收数据帧并重新调整按时间值过滤的地理数据帧
def plot_area(geodataframe ,title_name,w ,h ,hovertool=None, tile = None, cmp_colum = None ,palette_name = None,
cmp = False,ax =False):
from bokeh.plotting import figure
from bokeh.tile_providers import get_provider
from bokeh.models import GeoJSONDataSource,ColumnDataSource,ColorBar,BasicTicker,LinearColorMapper
poligonos = GeoJSONDataSource(geojson=geodataframe.to_json())
tile_provider = get_provider(tile)
p = figure(title=title_name,plot_width=w, plot_height=h,tooltips=hovertool)
p.add_tile(tile_provider)
p.axis.visible = ax
if cmp:
color_mapper = LinearColorMapper(palette = palette_name , low = geodataframe[cmp_colum].min(),
high = geodataframe[cmp_colum].max())
color_bar = ColorBar(color_mapper=color_mapper, ticker=BasicTicker(),location=(0,0),
label_standoff=12)
p.patches('xs','ys', source=poligonos, fill_alpha=1, line_width=0.5, line_color='black',
fill_color={'field' :cmp_colum, 'transform': color_mapper})
p.add_layout(color_bar, 'left')
else :
pass
return p
这个函数绘制一个区域。
所以 ...
from bokeh.application import Application
from bokeh.application.handlers import FunctionHandler
from bokeh.models.widgets import DataTable,Paragraph
from bokeh.layouts import row, widgetbox
from bokeh.layouts import layout
from bokeh.models.widgets import Slider
import panel as pn
from bokeh.io import curdoc
from bokeh.io import show
g = get_dataset(precipitacao_por_bacia,'datahora','st_astext',dias[0])
g.reset_index(drop=True,inplace=True)
g['datahora'] = g['datahora'].apply(lambda x: str(x))
p = plot_area(g ,'Precipitação ',w = 500 ,h = 500, hovertool=[('Bacia','@bacia_nome'),
('precipitação','@val')],tile = 'CARTODBPOSITRON_RETINA', cmp_colum = 'val' ,
palette_name = 'Viridis256',cmp = True,ax =False)
def update_map(attrname, old, new):
g = get_dataset(precipitacao_por_bacia,'datahora','st_astext',dias[slider.value])
g.reset_index(drop=True,inplace=True)
plot_area(g ,'Precipitação ',w = 500 ,h = 500, hovertool=[('Bacia','@bacia_nome'),
('precipitação','@val')],tile = 'CARTODBPOSITRON_RETINA', cmp_colum = 'val' ,
palette_name = 'Viridis256',cmp = True,ax =False)
g['datahora'] = g['datahora'].apply(lambda x: str(x))
output.text= str(g['datahora'][0])
slider = Slider(title="Day", value=0, start=0, end=409)
output=Paragraph()[enter image description here][1]
slider.on_change('value', update_map)
layout = row(p,widgetbox(slider,output))
curdoc().add_root(layout)