2015-09-28 25 views
0

我有一个Openlayers地图与几个WMS图层,我想通过“getGetFeatureInfoUrl”来请求特征信息。可以在图层树中打开/关闭图层的可见性。我想,当点击某处地图:OpenLayers 3 - 几个WMS图层,如何仅从可见图像获取特征信息?

  • 获取功能信息仅适用于当前可见
  • 层,如果有在选定的地点有多个层,得到功能信息为他们所有。

我使用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新手在这里)。

+0

http://jsfiddle.net/jonataswalker/j34xzaa3/6/- 不是很深,我只是删除了一些js错误 - 总是检查控制台。 –

回答

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>'; 
      } 
     } 
    }); 

}); 

编辑:语法

+0

这工作得很好!工作示例:http://jsfiddle.net/kidalex/j34xzaa3/8/ – wowbag

+0

谢谢@Fbma – zhulinpinyu