OpenLayers 3 hasFeatureAtPixel 图层过滤器
OpenLayers 3 hasFeatureAtPixel filter for layer
我正在尝试使用从官方 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 调用导致在控制台中给出特征对象,但没有图层对象,这些返回为 'undefined'。这是我需要测试图层是否正确的图层对象。
知道为什么这不起作用吗?
The filter function will receive one argument, the layer-candidate and
it should return a boolean value.
假设您有一个图层:
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';
}
});
我正在尝试使用从官方 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 调用导致在控制台中给出特征对象,但没有图层对象,这些返回为 'undefined'。这是我需要测试图层是否正确的图层对象。
知道为什么这不起作用吗?
The filter function will receive one argument, the layer-candidate and it should return a boolean value.
假设您有一个图层:
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';
}
});