使用数组过滤 Mapbox GL JS
Filtering with array 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]
});
我很确定问题出在我格式化过滤器的方式上 - 如果我颠倒 true 和 false 的顺序,我会看到每个点的所有样式。非常感谢您的帮助!
出问题的是 SPoints
是一个局部变量(大概是一个数组),但你传递的是一个字符串 "SPoints"
.
你应该这样做:
var filter = ['match', ['get', 'ID'], SPoints, true, false];
我正在尝试创建一个高亮层以在地图上选中时显示某些点 - 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]
});
我很确定问题出在我格式化过滤器的方式上 - 如果我颠倒 true 和 false 的顺序,我会看到每个点的所有样式。非常感谢您的帮助!
出问题的是 SPoints
是一个局部变量(大概是一个数组),但你传递的是一个字符串 "SPoints"
.
你应该这样做:
var filter = ['match', ['get', 'ID'], SPoints, true, false];