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

如何在Mapsui中用DispatcherTimer更新WMS时间参数并触发请求?

WMS图层更新TIME参数后不发起请求的解决方法

直接修改WmsProvider的ExtraParams字典不会自动触发WMS服务的新请求,因为控件无法感知字典内部的变更。要实现类似OpenLayers中updateParams的功能,需要主动触发图层刷新,以下是具体实现:

修正后的代码

private async void DispatcherTimer_Tick(object? sender, EventArgs e)
{
    var wmsLayer = mapControl.Map?.Layers[1] as ImageLayer;
    if (wmsLayer?.DataSource is WmsProvider source)
    {
        // 更新TIME参数
        source.ExtraParams["TIME"] = GetFormattedDateTime(1);
        // 主动触发WMS重新请求
        source.Refresh();
        
        // 如果Refresh()方法无效(部分GIS控件可能未实现),可尝试重置数据源:
        // wmsLayer.DataSource = new WmsProvider(
        //     source.Uri, 
        //     source.Layers, 
        //     new Dictionary<string, string>(source.ExtraParams)
        // );
    }
}

核心要点

  • 调用Refresh()方法:绝大多数GIS控件的WmsProvider都会提供Refresh()接口,用于通知数据源重新向WMS服务发起请求,这是最简洁的方式。
  • 重置数据源:若控件未实现Refresh(),可以通过重新实例化WmsProvider并赋值给图层的DataSource属性,强制控件重新加载图层数据。
  • 时间格式校验:确保GetFormattedDateTime(1)返回的时间格式符合目标WMS服务的要求(通常为ISO 8601标准格式,例如2024-05-20T14:30:00Z)。

内容的提问来源于stack exchange,提问作者cise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:42:41