【问题标题】:OpenLayers 4 - LayerFilter on forEachFeatureAtPixelOpenLayers 4 - forEachFeatureAtPixel 上的 LayerFilter
【发布时间】:2017-07-01 04:24:07
【问题描述】:

我有 2 个矢量图层,我希望只有 1 个可供 WFS 获取要素信息层选择。 OL4 文档告诉我 forEachFetuerAtPixel 函数有一个 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 不是函数”。

谁能指出我正确的方向?

【问题讨论】:

    标签: javascript openlayers


    【解决方案1】:

    看起来你的参数交换了。

    forEachFeatureAtPixel 的参数是(像素、回调、选项)

    你有(像素、选项、回调)

    【讨论】:

    • 感谢您的帮助,它现在正在工作。没有意识到订单如此重要。我剪切了 layerFilter 代码并将其移到了末尾。
    • @Bob 你能解释一下或者用代码更新你的答案
    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2018-01-07
    相关资源
    最近更新 更多