【问题标题】:Select features of layer which is not on top选择不在顶部的图层的特征
【发布时间】:2013-04-29 12:24:31
【问题描述】:

我有一个包含 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转发了这个问题

【问题讨论】:

  • 尝试将多个层传递给 SelectFeature 构造函数:[wfsLayer, overlayLayer]
  • 谢谢克里斯托夫。我确实尝试过,但后来出现此错误:TypeError: a.renderer is undefined The overlayLayer is a GWC layer (using GeoServer)
  • 也许可以试试 GIS stackexchange 论坛,我从没用过 GWC 层。

标签: openlayers


【解决方案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 层是您要从中选择的唯一层,您的选择控件构造函数应该只列出该层。

【讨论】:

    猜你喜欢
    • 2020-03-15
    • 2015-10-09
    • 2023-03-13
    • 2017-06-26
    • 2022-11-28
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多