2013-04-29 57 views
4

我有一个包含3层的贴图:1个基础层,1个覆盖层和1个WFS层。 予加载它们是这样的:选择不在顶层的特征

map.addLayers([baseLayer, wfsLayer, overlayLayer]); 

当用户点击地图上应该选择WFS层上的特征。 所以我已经添加了选择控制调用map.addLayers后:

selectControl = new OpenLayers.Control.SelectFeature(
     [wfsLayer], 
     { 
      clickout: true, toggle: false, 
      multiple: false, hover: false 
     } 
); 
    map.addControl(selectControl); 
    selectControl.activate(); 

这个伟大的工程,点击后得到选择我的特点。

但我的覆盖层位于WFS层下面,我希望它位于顶层。 覆盖图层是未填充的多边形图层。 所以我加了

map.setLayerZIndex(overlayLayer, map.Z_INDEX_BASE[ "Feature" ]+10); 

after map.addLayers。 这看起来没问题。我的覆盖图层现在位于我的WFS图层上方。 但是,当我现在点击地图时,没有选择。

很可能我没有做对。我怎样才能使我的覆盖图层上和我的WFS图层可选?

[编辑]

如由Christophe提到我试图

selectControl = new OpenLayers.Control.SelectFeature( 
     [wfsLayer, overlayLayer], 
     { 
     clickout: true, toggle: false, 
     multiple: false, hover: false 
     } 
); 

但是,这导致了一个错误OL,可能是因为覆盖层是一个WMS层。

[编辑#2]

我转贴了这个问题https://gis.stackexchange.com/questions/59619/select-features-of-layer-which-is-not-on-top-in-openlayers

+0

尝试将多个图层传递给SelectFeature构造函数:'[wfsLayer,overlayLayer]' – 2013-04-29 13:15:49

+0

谢谢Christophe。我尝试过,但后来我得到这个错误: TypeError:a.renderer未定义 overlayLayer是一个GWC层(使用GeoServer) – 2013-04-29 18:30:55

+1

也许尝试GIS stackexchange论坛,我从来没有使用GWC层。 – 2013-04-30 10:50:52

回答

1

我会建议你使用了错误的方法来改变你的图层顺序。

我会建议尝试

var wfsLayer = map.getLayersByName('WFS_Layer_Name')[0]; 
map.raiseLayer(wfsLayer, map.layers.length); 

如果你只有一个另一层这应该让你的WFS层顶端,让你的控制正常工作。

如果你有一个以上的其他层或你想设置一个特定的索引,你可以尝试

var wfsLayer = map.getLayersByName('WFS_Layer_Name')[0]; 
map.setLayerIndex(wfsLayer, 99); 

请注意您的选择控制的构造函数应该只列出你的WFS层,如果这是你想要的唯一层从中选择。