如何在Mapsui中为时间感知型WMS Provider传入TIME参数?
问题原因
你错误地将TIME参数直接附加到了用于获取WMS服务元数据(GetCapabilities)的URL中,导致Mapsui解析GetCapabilities响应时无法找到规范的<Service>标签,从而抛出“Service tag not found”错误。GetCapabilities请求不需要TIME参数,额外参数会干扰服务返回的元数据格式。
正确实现方式
- 使用不含
TIME参数的标准GetCapabilities URL创建WmsProvider,确保Mapsui能正确解析服务元数据。 - 通过
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
相关产品推荐
相关产品推荐

