OpenLayers 3 - 几个WMS图层,如何仅从可见的图层获取要素信息?

时间:2015-09-28 11:21:19

标签: javascript jquery openlayers-3

我有一个Openlayers地图,其中包含几个WMS图层,我想从中通过" getGetFeatureInfoUrl"来请求功能信息。可以在图层树中打开/关闭图层的可见性。我想点击地图中的某个地方:

  • 仅为当前可见的图层获取功能信息
  • 并且,如果所选位置有多个图层,请获取所有这些图层的功能信息。

我使用了OpenLayers网站上的示例代码。我尝试了这个代码的变种

var url = layers[2].getSource().getGetFeatureInfoUrl(
    evt1.coordinate, viewResolution, 'EPSG:3857', {
        'INFO_FORMAT': 'text/html',
            'FEATURE_COUNT': '300'
    });

喜欢

var url = layers[].getSource().getGetFeatureInfoUrl(var url = layers[1,2].getSource().getGetFeatureInfoUrl(,但要么没有提供功能信息,要么仅提供最后一层 - 无论它是否可见。

我在这里创建了一个带有两个示例图层的JSFiddle:http://jsfiddle.net/kidalex/j34xzaa3/5/

之前提出过类似问题,例如:https://gis.stackexchange.com/questions/114297/querying-multiple-wms-layers-in-ol3-and-adding-to-a-single-popup-window;但我无法理解如何应用这些解决方案(这里是JS / OL新手)。

1 个答案:

答案 0 :(得分:1)

你应该迭代你的图层,只有当它们可见而不是基础层时才调用getFeatureInfo,尝试类似:

map.on('singleclick', function (evt1) {
    document.getElementById('info').innerHTML = '';
    var viewResolution = /** @type {number} */
    (view.getResolution());
    var url = '';
    document.getElementById('info').innerHTML ='';
    layers.forEach(function (layer, i, layers) {
        if (layer.getVisible() && layer.get('name')!='Basemap') {
            url = layer.getSource().getGetFeatureInfoUrl(evt1.coordinate, viewResolution, 'EPSG:3857', {
                'INFO_FORMAT': 'text/html',
                    'FEATURE_COUNT': '300'
            });
            if (url) {
                document.getElementById('info').innerHTML +=
                    '<iframe seamless src="' + url + '"></iframe>';
            }
        }
    });

});

编辑:语法