使用forEachFeatureAtPixel方法如何过滤图层

8
我很难弄清如何使用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不是一个函数的错误。

我正在使用文档,但说实话,我有点难以阅读和实现一些方法API

2个回答

10

好的,我终于做到了。在阅读文档时有些匆忙,问题出在回调函数上。需要像文档中指出的那样返回要素才能停止检测。 ...为了停止检测,回调函数可以返回一个真值。

因此,正确的格式应该是这样的:(我使用的是4.5.6版本)

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

现在已经正常工作了。尽情享用 :)

4

对于那些像我一样受到图层名称困扰的人,我可以建议以下方法作为替代方式:

我将所有的图层存储在变量中,然后按照以下方式进行筛选;

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接