我试图在OpenLayers5中使用DrawExtent交互来定义对Geoserver的WMS / WCS请求的BBOX参数。使用此技术,我可以使用自定义WMS URL检索所需的图像子集,但是当我在ImageWMS的params属性中设置BBOX时,响应默认为整个图像。
我尝试使用“自定义”网址:
'http://localhost:8080/geoserver/wms'+
'?request=GetMap'+
'&service=WMS'+
'&version=1.3.0'+
'&layers='+name+
'&styles=""'+
'&crs=EPSG:3857'+
->'&bbox='+bounds+
'&width=665'+
'&height=551'+
'&format=image/geotiff';
请求相同的子集起作用,但是我似乎无法让OpenLayers将GeoTIFF响应识别为一层(使用ol.source.Image()和ol.layer.Image())。因此,我默认返回到ol.source.ImageWMS(),它提供了param属性,可以将BBOX设置为坐标字符串。问题是这些内容被覆盖(?),并且使用定义为图像范围的BBOX发送请求。
草稿箱扩展交互
var extent = new ol.interaction.Extent({
condition: ol.events.conditions
});
map.addInteraction(extent);
extent.setActive(false);
window.addEventListener('keydown', function(event) {
if (event.keyCode == 16) {
extent.setActive(true);
}
});
window.addEventListener('keyup', function(event) {
if (event.keyCode == 16) {
extent.setActive(false);
var bbox = extent.getExtent();
bbox[0]=Math.round(bbox[0]);
bbox[1]=Math.round(bbox[1]);
bbox[2]=Math.round(bbox[2]);
bbox[3]=Math.round(bbox[3]);
var bboxString = bbox.toString();
getWMS('nurc:Img_Sample',bboxString);
};
});
WMS获取地图
function getWMS(name,bounds) {
var wmsSource = new ol.source.ImageWMS({
url: 'http://localhost:8080/geoserver/wms',
params: {LAYERS:name, BBOX:bounds, CRS:'EPSG:3857'},
serverType: 'geoserver'
crossOrigin: 'anonymous'
});
var wmsLayer = new ol.layer.Image({
source: wmsSource
});
map.addLayer(wmsLayer);
};
WMS请求应将BBOX属性设置为扩展交互所传递的边界,但是实际的url被nurc:img_Sample的边界覆盖