Фильтрация с помощью массива Mapbox GL JS

Я пытаюсь создать слой подсветки, чтобы показать определенные точки при выборе на карте - сигнал newMarker приходит с сервера, принося objectID, а затем я хочу добавить соответствующую точку (обозначается текущей переменной) в фильтруемый слой. Однако фильтр не улавливает ни одной из добавленных к нему точек:

 socket.on('newMarker', function(data) {
     var current = map.queryRenderedFeatures({layers:['tax']}) 
                  [parseInt(data['newMarker'])];
     SPoints.unshift(current.properties.ID);

     var filter = ['match', ['get', 'ID'],'SPoints', true, false];
     map.setFilter('place-highlight', filter);

     var newLayer = map.queryRenderedFeatures({layers:['place- 
                    highlight']});
});

Слой, к которому я пытаюсь добавить точки:

 map.addLayer({ 
      'id': 'place-highlight',
      'type': 'circle', 
      'source': 'tax',
      'source-layer': 'AllPointsGeoJSON-12eyog',
      'paint': {
        'circle-color': '#00ff00',
        'circle-radius': 20,
        'circle-opacity': 1,
      },
      'filter': ['==', 'ID', -1]
    });

Я почти уверен, что проблема в том, как я форматирую свой фильтр - если я изменю порядок истинного и ложного, я увижу все стили в каждой точке. Большое спасибо за вашу помощь!


person zipzip12    schedule 11.07.2018    source источник


Ответы (1)


Что происходит неправильно, так это то, что SPoints является локальной переменной (предположительно, массивом), но вместо этого вы передаете строку "SPoints".

Вместо этого вы должны сделать это:

var filter = ['match', ['get', 'ID'], SPoints, true, false];
person Steve Bennett    schedule 11.07.2018
comment
ты лучший! Большое спасибо, что заметил это! - person zipzip12; 11.07.2018
comment
Похоже, вам скоро не понадобится часть , true, false: github.com/mapbox/ mapbox-gl-js/issues/6950 - person Steve Bennett; 16.07.2018