You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过回调更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:23:22