OpenLayers 4 - 在forEachFeatureAtPixel上使用LayerFilter

4

我有两个矢量图层,我只想在WFS获取要素信息图层中选择其中一个。OL4文档告诉我forEachFeatuerAtPixel函数有opt_layerfilter选项。

我和这个问题很相似:OpenLayers 3 hasFeatureAtPixel filter for layer。由于我的JavaScript知识不足,我无法使用以下代码使其在OpenLayers 4中工作:

var displayFeatureInfo = function (pixel) {

    var features = [];
    map.forEachFeatureAtPixel(pixel, {
        layerFilter: function (layer) {
            return layer.get('name') === 'isochrones';
        }
    }, function (feature) {
        features.push(feature);
    });

    if (features.length > 0) {
        var info = [];
        var i, ii;
        for (i = 0, ii = features.length; i < ii; ++i) {
            info.push('<div id="infobox">' + '<p2>' + 'Isochroon ' + features[i].get('name') + ', locatie ' + features[i].get('facilityid') + '</p2>' + '<p>' + 'aantal lopend: ' + features[i].get('n_pedestrians') + ', fiets: ' + features[i].get('n_bike') + ', ebike: ' + features[i].get('n_ebike') + '<br>' + 'speedpedelec: ' + features[i].get('n_speedpedelec') + ', auto: ' + features[i].get('n_car') + '</p>' + '</div>');
        }
        document.getElementById('info').innerHTML = info.join(', ') || '&nbsp';
    } else {
        document.getElementById('info').innerHTML = '&nbsp;';
    }
};

map.on('click', function (evt) {
    displayFeatureInfo(evt.pixel);
});

我想选择的图层名为“等时线”。 当我尝试点击地图中的任何矢量图层时,它会抛出一个错误“d.call不是一个函数”。 有人能指点我正确的方向吗?
1个回答

3

看起来您的参数顺序被交换了。

forEachFeatureAtPixel的参数为(像素,回调函数,选项)

您输入的是(像素,选项,回调函数)


谢谢您的帮助,现在它可以工作了。我没有意识到顺序如此重要。我删掉了layerFilter代码,只是将其移到了最后。 - OpenLayers4
@Bob,你能否请稍微解释一下或者更新你的答案并附上代码? - Svinjica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接