首页 / OpenLayers / API 文档
WMSSource
先看结论
WMS 影像源(ol.source.ImageWMS)。把一次 GetMap 请求的结果当作整幅图片铺到图层上,适合图层少、样式由服务端决定的服务。
new ol.source.ImageWMS(options)
构造参数
| 参数 | 说明 |
|---|---|
url | WMS 服务地址,必填 |
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)。