OpenLayers 4 - LayerFilter для forEachFeatureAtPixel

1

У меня есть два векторных слоя, из которых я хочу, чтобы только 1 можно было выбрать для информационного слоя WFS. Документы OL4 говорят мне, что есть функция opt_layerfilter для функции forEachFeatuerAtPixel.

Im в аналогичной ситуации: OpenLayers 3 hasFeatureAtPixel фильтр для слоя. Из-за недостатка знаний 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 не является функцией", когда я пытаюсь щелкнуть любой векторный слой на карте.

Может ли кто-нибудь указать мне в правильном направлении?

Теги:
openlayers

1 ответ

0
Лучший ответ

Похоже, что у вас есть ваши аргументы.

Параметрами forEachFeatureAtPixel являются (пиксель, обратный вызов, параметры)

У вас есть (пиксель, параметры, обратный вызов)

  • 0
    Спасибо за помощь, сейчас работает. Не понял, заказ был так важен. Я вырезал код layerFilter и просто переместил его в конец.
  • 0
    @ Боб, пожалуйста, объясни немного или обнови свой ответ кодом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню