在OpenLayers3中,如何在选中时阻止某个功能在其他功能前移动?

时间:2016-01-20 21:05:03

标签: openlayers-3

我正在使用的层次结构如下所示:

FRONT  
1 - layer with several features (e.g. point data)  
2 - layer with several features (e.g. path data)  
3 - layer with several features (e.g. region data)  
BACK  

当用户根据ol.interaction.Select选择第3层中的要素时,默认行为是在第1层前面呈现所选要素。如何防止此重新排序?

2 个答案:

答案 0 :(得分:0)

我有一个几乎类似的问题,当我选择区域时 - 点和其他矢量几何隐藏在所选特征后面。在我的用例中,透明填充的特殊造型是解决方案。 如果你想要一个基于图层渲染的解决方案,我建议用ZIndex处理它。 ol.interaction.Select没有提供setZIndex,但如果您查看源代码(https://github.com/openlayers/ol3/blob/v3.13.0/src/ol/interaction/selectinteraction.js),您可以看到交互将所选要素保存在您可以访问的非托管图层中不同的方式(map.getLayers()。getArray()。forEach ....或sth),我相信你可以设置ZIndex。注意默认的zIndex为0,较高的索引将使图层在上方和下方呈现。

答案 1 :(得分:0)

以下是选择互动在ol3中的工作原理。所选要素为marked,以便在渲染时跳过。换句话说,它在被选中后重新渲染时从原始图层中消失。

然后使用传统的map.addLayer方法将其添加到实际未添加到地图的其他图层,但使用layer.setMap设置为地图。该层最终被绘制在所有其他层之上,从而导致"选择"功能是最重要的。

该架构决定提高性能。但是,您只需使用map.forEachFeatureAtPixel方法并在那里实现您自己的选择概念,即可轻松实现您想要的效果,即让点击的功能保持原样并改变其风格。它会慢一些,但很简单,可以达到你想要的效果。