获取OpenLayers 4中WMS层的范围

获取OpenLayers 4中WMS层的范围,openlayers,openlayers-3,wms,mapserver,Openlayers,Openlayers 3,Wms,Mapserver,我想从BBOX参数动态检索OpenLayers中ImageWMS层的范围 我会用它(例如)缩放到图层的范围 目前,我的代码如下所示: var layer2 = new ol.layer.Image({ title: 'zone', visible: false, source: wmsSource2, extent: [952014.59,5571269.68,1272301.10,5862273.22] });

我想从BBOX参数动态检索OpenLayers中ImageWMS层的范围

我会用它(例如)缩放到图层的范围

目前,我的代码如下所示:

    var layer2 = new ol.layer.Image({
        title: 'zone',
        visible: false,
        source: wmsSource2,
        extent: [952014.59,5571269.68,1272301.10,5862273.22]
    });

...


// in the layers tab, zoom map to layer when zoom icon is clicked
$('.fa-search').on('click', function() {
    var layer = layer2;
    view.fit(layer.getExtent(), {
        duration:1000
    });
});
如您所见,现在我在
变量中定义范围

相反,我希望从WMS本身获得它,而不是在我的js中重新定义它

从文档中可以看出,我可以在
params
选项中设置BBOX WMS参数。更好的是,它是由OL4自动设置的


所以,问题是:如果可能的话,我如何从这个参数中检索BBOX?如果有必要的话,我将使用Mapserver作为WMS服务器。

您可以尝试这样的方法来检索BBOX的范围

map.on('click', function(evt) {
    //get extent
    var extent_coords = evt.map.getView().calculateExtent();
    // get coordinates
    var coords_view = evt.coordinate;
    coords.innerHTML = [
        coords_view[0].toFixed(3),
        coords_view[1].toFixed(3)
    ]
    bb_extent.innerHTML = [
        extent_coords[0].toFixed(3),
        extent_coords[1].toFixed(3),
        extent_coords[2].toFixed(3),
        extent_coords[3].toFixed(3)

    ].join('<br>')

});
map.on('click',函数(evt){
//获得范围
var extent_coords=evt.map.getView().calculateExtent();
//获取坐标
var coords_view=evt.coordinate;
coords.innerHTML=[
coords_视图[0]。toFixed(3),
coords_视图[1]。toFixed(3)
]
bb_extent.innerHTML=[
范围坐标[0]。固定(3),
范围坐标[1]。固定(3),
范围坐标[2]。固定(3),
范围坐标[3]。固定(3)
].join(“
”) });
我希望下面的小提琴能把你们推向正确的方向,享受:)


您可以尝试这样的方法来检索BBOX的范围

map.on('click', function(evt) {
    //get extent
    var extent_coords = evt.map.getView().calculateExtent();
    // get coordinates
    var coords_view = evt.coordinate;
    coords.innerHTML = [
        coords_view[0].toFixed(3),
        coords_view[1].toFixed(3)
    ]
    bb_extent.innerHTML = [
        extent_coords[0].toFixed(3),
        extent_coords[1].toFixed(3),
        extent_coords[2].toFixed(3),
        extent_coords[3].toFixed(3)

    ].join('<br>')

});
map.on('click',函数(evt){
//获得范围
var extent_coords=evt.map.getView().calculateExtent();
//获取坐标
var coords_view=evt.coordinate;
coords.innerHTML=[
coords_视图[0]。toFixed(3),
coords_视图[1]。toFixed(3)
]
bb_extent.innerHTML=[
范围坐标[0]。固定(3),
范围坐标[1]。固定(3),
范围坐标[2]。固定(3),
范围坐标[3]。固定(3)
].join(“
”) });
我希望下面的小提琴能把你们推向正确的方向,享受:)


我最终遵循了这个例子

这有点棘手,但我希望这是值得的

基本上,使用下面的代码,我现在能够通过解析WMS GetCapabilities而不是在js中硬编码来检索层范围(至少到目前为止,其中一个是这样)

这样,如果我的WMS层发生变化,我就不必更新js。使用相同的解析器,我希望能够循环遍历每一层,以自动地将它们插入到我的openlayers代码中(这将是的下一个改进之一)


我最终遵循了这个例子

这有点棘手,但我希望这是值得的

基本上,使用下面的代码,我现在能够通过解析WMS GetCapabilities而不是在js中硬编码来检索层范围(至少到目前为止,其中一个是这样)

这样,如果我的WMS层发生变化,我就不必更新js。使用相同的解析器,我希望能够循环遍历每一层,以自动地将它们插入到我的openlayers代码中(这将是的下一个改进之一)


嗯,也许我找到了一个可能的解决办法。想知道是否有比解析GetCapabilities响应更直接的替代方法。可能还有其他解决方案,但都需要解析GetCapabilities响应,因为没有其他WMS操作提供层的完整范围。嗯,也许我找到了一个可能的解决方案。想知道是否有比解析GetCapabilities响应更直接的替代方法。可能还有其他解决方案,但都需要解析GetCapabilities响应,因为没有其他WMS操作提供层的完整范围。谢谢,但我不太确定这是我需要的。我不是想得到地图视图的范围,而是地图中(每个)WMS层的范围。这将允许我(例如)缩放到该层范围,我已经在从js中定义该层范围。相反,我可能需要从WMS本身检索它。谢谢,但我不太确定这是我需要的。我不是想得到地图视图的范围,而是地图中(每个)WMS层的范围。这将允许我(例如)缩放到该层范围,我已经在从js中定义该层范围。相反,我可能需要从WMS本身检索它。