如何使用forEachFeatureAtPixel方法过滤图层

时间:2018-04-05 11:16:32

标签: javascript gis openlayers openlayers-3

我很难弄清楚如何使用 forEachFeatureAtPixel 方法过滤图层。到目前为止,我还没有取得任何成功。我基本上想要过滤图层并在事件上应用叠加样式(例如“点击”),或者更准确地说我想使用此example实现悬停效果但是使用隔离层。

在上面的示例中使用这样的功能来获取功能:

var feature = map.forEachFeatureAtPixel(pixel, function(feature) {
          return feature;
        });

我想通过使用图层过滤器稍微调整一下代码但我得到syntax Uncaught SyntaxError: Unexpected token (语法错误:

 var features = map.getFeaturesAtPixel(pixel, function(features) {
        layerFilter: function(layer) {
            return layer.get('layer_name') === 'someName';
        }
    });

然后,我尝试了这个

 var feature = map.forEachFeatureAtPixel(pixel, {
        layerFilter: function(layer) {
            return layer.get('layer_name') === 'someName';
        }
    });

但后来我遇到Uncaught TypeError: d.call is not a function错误

我正在使用文档,但公平地说,我正在努力阅读和实现一些方法API

2 个答案:

答案 0 :(得分:2)

好的,我终于做到了。阅读文档时我有点仓促,问题出现在回调函数中。我需要返回功能,因为它在文档中指出。 ...要停止检测,回调函数可以返回真值。

所以,正确的格式是这样的:(我使用的是4.5.6版本)

var feature = map.forEachFeatureAtPixel(pixel, function(feature) {
        return feature;
    }, {
        layerFilter: function(layer) {
            return layer.get('layer_name') === 'someName';
        }
    });

现在工作正常。享受:)

答案 1 :(得分:1)

对于那些像我一样遭受过层名困扰的人,我可以建议您采用以下方式;

我将所有图层都存储在变量中,然后像这样过滤它们;

var countryLayer = new VectorLayer({
  source: countryLayerSource,
  style: //some styling in here
});

...

var feature = map.forEachFeatureAtPixel(
  pixel,
  function (feature) {
    return feature;
  },
  {
    layerFilter: function (layer) {
      return layer === countryLayer;
    },
  }
);

使用的API:v6.3.1。 Openlayers API