选择不在顶部的图层的特征。

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

在 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上重新发布了这个问题。


尝试将多个图层传递给SelectFeature构造函数:[wfsLayer,overlayLayer] - Christophe Roussy
谢谢Christophe。我确实尝试过,但是我得到了这个错误: TypeError: a.renderer is undefinedoverlayLayer是一个使用GeoServer的GWC图层。 - Paul Meems
1
也许可以尝试一下GIS StackExchange论坛,我从未使用过GWC图层。 - Christophe Roussy
1个回答

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图层,如果那是您唯一想要选择的图层。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接