OpenLayers 3具有图层

时间:2016-09-06 17:11:10

标签: javascript openlayers-3

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

http://openlayers.org/en/latest/examples/earthquake-clusters.html

我只有在悬停在特定图层上时才需要触发动作。在查阅了官方文档后,我发现你可以使用带有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调用导致在控制台中给出要素对象,但没有图层对象,这些对象将作为“未定义”返回。我需要测试图层对象是否是正确的图层。

为什么这不起作用的任何想法?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

  

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

From API Docs.

我们假设您有一个类似的图层:

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' : '';
});