簡體   English   中英

OpenLayers 3具有用於圖層的FeatureAtPixel過濾器

[英]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調用導致在控制台中提供要素對象,但沒有圖層對象,這些對象將作為“未定義”返回。 我需要測試圖層對象是否是正確的圖層對象。

任何想法為什么這不起作用?

實際上,API已被重寫(v4.0.1),工作示例如下:

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

過濾器函數將接收一個參數(layer-candidate),並且應返回一個布爾值。

來自API文檔。

假設您有一個類似的圖層:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM