Openlayers 4 - 修改交互&同一坐标上的多个要素

时间:2017-08-23 14:34:14

标签: openlayers

我在具有多个功能的矢量图层上启用了修改交互。它可以很好地将功能移动到新位置。但是,如果同一坐标上有更多要素,则所有要素同时移动。 See example on codepen

sudo su

有没有办法避免这种情况?我找到的唯一解决方案是:

  1. 我有一个选择的交互选择功能
  2. 使用翻译互动来移动其中一项功能
    1. 在指针移动事件中检测一个或多个要素是否在坐标处,然后选择其中一个
    2. 添加所选要素以修改要素图层并将其移动
    3. 还有其他方式吗?

      Regrads RM

1 个答案:

答案 0 :(得分:0)

还有另一种方式。您可以在地图上注册“pointermove”处理程序,在该地图中您可以获得最顶层的功能,并将其设置为修改交互处理的源上的唯一功能。有关完整示例,请参阅https://codepen.io/ahocevar/pen/YxjyRd

除了在代码中,您将修改交互连接到源而不是集合,并且该源(modifySource)与矢量图层的源分开并且最初为空。在pointermove处理程序中,您只需向该源添加一个功能:

function pointermove(e) {
  if (e.dragging) {
    return;
  }
  var features = map.getFeaturesAtPixel(e.pixel, {
    layerFilter: function(l) {
      return l == vector;
    }
  });
  if (features && features[0] != modifySource.getFeatures()[0]) {
    modifySource.clear();
    modifySource.addFeature(features[0]);
  }
}
map.on("pointermove", pointermove);

另请注意,必须先注册此处理程序,然后才能将“修改”交互添加到地图中。