如何通过回调更新dash-leaflet中Polyline的positions属性?
解决Dash Leaflet中通过回调更新Polyline的positions属性问题
你的问题出在回调的Output属性指定错误:Dash Leaflet的dl.Polyline组件用来控制位置的属性就是positions,而非你尝试的value或data。只需调整回调的Output目标属性即可实现更新。
修正后的完整代码如下:
import dash_leaflet as dl from dash import Dash, html, Output, Input, callback app = Dash() app.layout = html.Div( [ html.Button("更新折线", id="btn_run"), dl.Map( [ dl.TileLayer(), dl.Polyline(positions=[], id='position-data') ], center=[56, 10], zoom=6, style={'height': '50vh'} ) ] ) @app.callback( Output('position-data', 'positions'), # 改为positions属性 Input("btn_run", "n_clicks"), prevent_initial_call=True ) def on_click(n_clicks): positions = [[49.799558, 6.712016], [50.58268, 5.549233]] return positions if __name__ == '__main__': app.run_server(debug=True)
关键修改点
- 将回调
Output的第二个参数从value改为positions,这是dl.Polyline组件原生支持的属性,用来控制折线的坐标点集合。 - 修正了布局语法:原代码中
html.Div的子元素需以列表形式传入,否则会导致渲染异常。
运行代码后,点击按钮就能看到折线在地图上显示,实现了通过回调动态更新Polyline的位置。
内容的提问来源于stack exchange,提问作者Mohammad Namakshenas
相关产品推荐
相关产品推荐

