Javascript OpenLayers 3具有图层的功能像素过滤器

Javascript OpenLayers 3具有图层的功能像素过滤器,javascript,openlayers-3,Javascript,Openlayers 3,我正在尝试使用官方OL3示例页面中的以下方法创建鼠标悬停事件: 我只需要在悬停在特定层上时触发该操作。查阅了官方文档后,我发现可以将图层过滤器功能与hasFeatureAtPixel结合使用,但它似乎不起作用 map.on('pointermove', function(evt) { if (evt.dragging) { return; } var pixel = map.getEventPixel(evt.originalEvent); var

我正在尝试使用官方OL3示例页面中的以下方法创建鼠标悬停事件:

我只需要在悬停在特定层上时触发该操作。查阅了官方文档后,我发现可以将图层过滤器功能与hasFeatureAtPixel结合使用,但它似乎不起作用

map.on('pointermove', function(evt) {
    if (evt.dragging) {
       return;
    }
    var pixel = map.getEventPixel(evt.originalEvent);
    var hit = map.hasFeatureAtPixel(pixel, function(feature, layer) {
        console.log(layer);
        console.log(feature);       
    });
});
调用console.log会导致在控制台中提供功能对象,但没有层对象,这些对象将作为“未定义”返回。我需要测试图层是否正确的是图层对象

你知道为什么这样不行吗

filter函数将接收一个参数,即层候选和 它应该返回一个布尔值

假设您有一个层,如:

var vectorLayer = new ol.layer.Vector({
  name: 'test',
  // ...
});
您可以添加图层过滤器功能,如:

map.on('pointermove', function(e) {
  if (e.dragging) return;

  var hit = map.hasFeatureAtPixel(e.pixel, function(layer) {
    return layer.get('name') === 'test'; // boolean
  });
  map.getTarget().style.cursor = hit ? 'pointer' : '';
});
filter函数将接收一个参数,即层候选和 它应该返回一个布尔值

假设您有一个层,如:

var vectorLayer = new ol.layer.Vector({
  name: 'test',
  // ...
});
您可以添加图层过滤器功能,如:

map.on('pointermove', function(e) {
  if (e.dragging) return;

  var hit = map.hasFeatureAtPixel(e.pixel, function(layer) {
    return layer.get('name') === 'test'; // boolean
  });
  map.getTarget().style.cursor = hit ? 'pointer' : '';
});

实际上,API被重写为v4.0.1,工作示例如下:

var hit = map.hasFeatureAtPixel(e.pixel, {
    layerFilter: function (layer) {
        return layer.get('name') === 'test';
    }
});

实际上,API被重写为v4.0.1,工作示例如下:

var hit = map.hasFeatureAtPixel(e.pixel, {
    layerFilter: function (layer) {
        return layer.get('name') === 'test';
    }
});

我的向量层没有名称不幸的是,我通常比较层对象来识别层。另外,图层过滤器函数中的第一个参数不是一个图层,而是一个特性吗?这就是为什么我演示了一个console.out方法,因为我似乎无法从layer filter函数中获取层,结果显示它是未定义的。尽管如此,我还是会尝试一下,谢谢:检查所需图层的方式无关紧要,问题是如何实现图层过滤器。请参阅更新的答案。我的错误是使用了错误的示例代码来尝试解决我的问题。问题很简单,filter函数中的参数是图层,而不是您已经演示的特征。问题解决了。@SingleEntity我很乐意提供帮助。我的向量层没有名称。不幸的是,我通常比较层对象来识别层。另外,图层过滤器函数中的第一个参数不是一个图层,而是一个特性吗?这就是为什么我演示了一个console.out方法,因为我似乎无法从layer filter函数中获取层,结果显示它是未定义的。尽管如此,我还是会尝试一下,谢谢:检查所需图层的方式无关紧要,问题是如何实现图层过滤器。请参阅更新的答案。我的错误是使用了错误的示例代码来尝试解决我的问题。问题很简单,filter函数中的参数是图层,而不是您已经演示的特征。问题解决了。我很高兴能帮上忙。老兄,这真的救了我一命,我想弄清楚为什么它不起作用,真是疯了。它确实存在于API中,但对于那些像我一样不太习惯JS的人来说,实现它的方式并不那么清楚。伙计,这真的救了我一命,我想弄清楚为什么它不起作用。它确实存在于API中,但对于像我这样不太习惯JS的人来说,实现它的方式并不那么清楚。