2016-09-06 79 views
1

我试图使用从官方OL3例子页面采取以下方法来创建一个鼠标悬停事件3 hasFeatureAtPixel过滤器:的OpenLayers的层

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调用导致在控制台中给出要素对象,但没有图层对象,这些对象返回为'undefined'。它是我需要测试图层是否正确的图层对象。

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

回答

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

不幸的是,我的矢量图层没有名称,我通常比较图层对象来识别图层。另外,不是图层过滤器函数中的第一个参数,而不是图层?这就是为什么我演示了一个console.out方法,因为我似乎无法从图层过滤器函数中获取图层,因此未定义。我会尝试这个,虽然,谢谢:) –

+0

你会检查你想要的图层的方式并不重要,问题是如何实现图层过滤器。查看更新的答案。 –

+0

我的错误是使用不正确的示例代码来尝试解决我的问题。问题很简单,过滤器函数中的参数是图层,而不是您已经演示的功能。问题解决了。 –

2

其实API被重写(V4。 0.1),工作示例如下:

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

男人,今天真的救了我的皮,我疯了,试图找出为什么它不起作用。这是真的,它在API中,但是对于像我这样的人来说,实现它的方式并不那么习惯JS。 –

相关问题