首页 文章

选择不在顶部的图层功能

提问于
浏览
4

我有一个3层的 Map :1个基础层,1个叠加层和1个WFS层 . 我像这样加载它们:

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

当用户点击 Map 时,它应该选择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层之上 . 但是,当我现在点击 Map 时,没有任何内容被选中 .

很可能我做得不对 . 如何在顶部制作覆盖层并选择我的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转发了这个问题

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

    请注意,如果这是您要选择的唯一图层,那么您的select控件构造函数应该只列出您的wfs图层 .

相关问题