经纬志
首页 / OpenLayers / API 文档

WMSSource

先看结论

WMS 影像源(ol.source.ImageWMS)。把一次 GetMap 请求的结果当作整幅图片铺到图层上,适合图层少、样式由服务端决定的服务。

最后验证 2026-11-03 · OpenLayers 10.3.1 · 更新 2026-10-27 · 引用本文
new ol.source.ImageWMS(options)

构造参数

参数说明
urlWMS 服务地址,必填
params请求参数对象,LAYERS 必填,VERSION 默认 '1.3.0',STYLES 默认空串
projection服务端支持的投影,默认与视图一致
ratio预取倍数,默认 1.5,按视口 1.5 倍范围请求以减少拖动重载
hidpi是否按设备像素比请求,默认 true
serverType服务端类型,影响 hidpi 参数名,可取 'mapserver'、'geoserver'、'carmentaserver'、'qgis'
crossOrigin跨域取值,导出图片时需要 'anonymous'
imageLoadFunction自定义图片装载函数,签名 (image, src)
attributions版权文字

常用方法

方法返回说明
updateParams(params)void合并请求参数并重新请求,常用于切换 LAYERS
getFeatureInfoUrl(coord, resolution, projection, params)string生成 GetFeatureInfo 地址,参数不合法时返回 undefined
getImageLoadFunction()function取图片装载函数
setImageLoadFunction(fn)void替换图片装载函数
var wms = new ol.source.ImageWMS({
  url: 'https://example.com/geoserver/wms',
  params: {
    LAYERS: 'demo:landuse',
    VERSION: '1.3.0',
    STYLES: '',
    FORMAT: 'image/png',
    TRANSPARENT: true
  },
  serverType: 'geoserver',
  ratio: 1.5,
  crossOrigin: 'anonymous'
});

var layer = new ol.layer.Image({ source: wms, opacity: 0.8 });

// 切换图层
wms.updateParams({ LAYERS: 'demo:roads' });

// 点击查询属性
map.on('singleclick', function (evt) {
  var url = wms.getFeatureInfoUrl(
    evt.coordinate,
    map.getView().getResolution(),
    map.getView().getProjection(),
    { INFO_FORMAT: 'application/json' }
  );
  if (url) { fetch(url).then(function (r) { return r.json(); }).then(console.log); }
});

注意事项

  • 整幅图片按视口范围请求,每次缩放或平移都会重新发起 GetMap,图层多或图幅大时响应明显慢于瓦片源。
  • ratio 调大会增加单次请求的数据量,调小会导致拖动时频繁出现空白,1.5 是常用折中值。
  • WMS 1.3.0 在 EPSG:4326 下经纬度轴序为纬度在前,服务端与客户端的轴序约定不一致时会出现图层错位。
  • getFeatureInfoUrl 依赖服务端开启 GetFeatureInfo,返回 undefined 通常表示缺少必要参数或投影无法换算。
引用本文

经纬志(2026)。《WMSSource》。https://www.jingweizhi.com/openlayers/api/wms-source.html(访问日期 2026-11-03)。