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

如何在Mapsui中为时间感知型WMS Provider传入TIME参数?

问题原因

你错误地将TIME参数直接附加到了用于获取WMS服务元数据(GetCapabilities)的URL中,导致Mapsui解析GetCapabilities响应时无法找到规范的<Service>标签,从而抛出“Service tag not found”错误。GetCapabilities请求不需要TIME参数,额外参数会干扰服务返回的元数据格式。

正确实现方式
  1. 使用不含TIME参数的标准GetCapabilities URL创建WmsProvider,确保Mapsui能正确解析服务元数据。
  2. 通过WmsProvider的CustomParameters属性添加TIME参数,该参数会自动附加到后续的GetMap请求中,而非GetCapabilities请求。

修正后的代码如下:

private static async Task<WmsProvider> CreateWmsProviderAsync()
{
    // 标准的GetCapabilities请求URL,不带TIME参数
    var wmsCapabilitiesUrl = "https://mapservices.weather.noaa.gov/eventdriven/services/radar/radar_base_reflectivity_time/ImageServer/WMSServer?request=GetCapabilities&service=WMS";
    var provider = await WmsProvider.CreateAsync(wmsCapabilitiesUrl);
    
    provider.ContinueOnError = true;
    provider.TimeOut = 20000;   
    provider.CRS = "EPSG:3857";
    provider.AddLayer("0");
    provider.SetImageFormat(provider.OutputFormats[1]);
    
    // 添加TIME参数到自定义参数中,会自动带入GetMap请求
    var timeValue = DateTime.Now.AddHours(-12).ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
    provider.CustomParameters.Add("TIME", timeValue);
    
    return provider;
}
补充说明
  • CustomParameters是Mapsui专门用于添加自定义请求参数的集合,所有添加到这里的键值对都会在每次请求地图瓦片(GetMap)时自动附加到URL中。
  • 若需要动态更新TIME参数(比如定时刷新雷达数据),只需修改provider.CustomParameters["TIME"]的值即可,无需重新创建WmsProvider实例。

内容的提问来源于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 14:33:15