Mapbox GL JS:基于多维数组构建匹配表达式

问题描述 投票:0回答:1

我有以下数组:

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“表达式的输入/输出对。”

基于动态源构建这样的表达式的最佳方法是什么。

arrays mapbox mapbox-gl-js mapbox-gl
1个回答
0
投票

如果其他人正在搜索解决方案:创建表达式数组并使用它来添加图层:

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脚本预先调整数据,而不是创建复杂的过滤规则。

© www.soinside.com 2019 - 2024. All rights reserved.