我有以下数组:
var SplitUpLevels = [
[ zoomLevel: 6, locationIDs: [1, 2, 3]],
[ zoomLevel: 10, locationIDs: [4, 5, 6]],
];
我想基于单个缩放级别隐藏地图上的一些图标,并且仅当位置ID在阵列中时才隐藏。我从JSON源动态获取值。
我已经尝试过一个简单的forEach循环而没有任何成功:
"icon-opacity" : [
"interpolate",
["linear"],
["zoom"],
0,
1,
SplitUpLevels.forEach(function(SplitUpLevel) {
SplitUpLevel.zoomlevel,
[ "match", ["get", "Id"], SplitUpLevel.locationIDs, 0, 0 ]
}),
… ]
我要么得到答复
“icon-opacity:期望偶数个论点。”
要么
“icon-opacity [5]:必须使用输入值的文字数值(非计算表达式)定义”interpolate“表达式的输入/输出对。”
基于动态源构建这样的表达式的最佳方法是什么。
如果其他人正在搜索解决方案:创建表达式数组并使用它来添加图层:
var iconopacity = ["interpolate",
"linear",
"zoom"]
然后推送json文件中每个数组的表达式
SplitUpLevels.forEach(function(SplitUpLevel) {
iconopacity.push(SplitUpLevel.zoomlevel, [ "match", ["get", "Id"], SplitUpLevel.locationIDs, 0, 0 ]);
}
然后添加新图层
map.addLayer({
[…]
"paint" : {
"icon-opacity" : iconopacity
}
});
经过长时间的搜索后,我仍然决定使用PHP脚本预先调整数据,而不是创建复杂的过滤规则。