3

我有一个包含 3 层的地图:1 个基础层、1 个叠加层和 1 个 WFS 层。我像这样加载它们:

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

当用户点击地图时,它应该选择 WFS 图层上的要素。所以我在调用map.addLayers之后添加了select控件:

  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 层可选择?

[编辑]

正如克里斯托夫所说,我试过

  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转发了这个问题

4

1 回答 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 层,如果这是您要从中选择的唯一层。

于 2013-08-01T01:51:17.130 回答