javascript - 分类数据的 Mapbox 数据驱动样式 - 如何将表达式与数组输入匹配?

标签 javascript typescript mapbox mapbox-gl-js mapbox-gl

我有一个应用程序,其中多边形被动态添加到 Mapbox 图层中。我正在使用匹配表达式来设置多边形填充的样式,但在确定具有数组输入的表达式的语法时遇到问题。

这是我正在尝试做的事情的一个简单示例:https://stackblitz.com/edit/angular-bpuswd?file=src%2Fapp%2Fapp.component.ts

我有一个具有特征属性states的图层。我想根据this official mapbox example for data-driven styles将每个状态与不同的填充颜色相关联。 :

// want to match New York to color #F0F and Pennsylvania to color #FF0
const states = ['New York', 'Pennsylvania'];
const colors = ['#F0F', '#FF0'];
const statesAndColors = ['New York', '#F0F', 'Pennsylvania', '#FF0'];

this.map.addLayer({
  id: 'states',
  type: 'fill',
   source: {
      type: 'geojson',
      data: POLYGONS,
   },
   paint: {
     // doesn't work
     'fill-color': ['match', ['string', ['get', 'state']], states, colors, '#AAAAAA']

     // also doesn't work
     // 'fill-color': ['match', ['string', ['get', 'state']], statesAndColors, '#AAAAAA']

     // below example works
     // 'fill-color': ['match', ['string', ['get', 'state']], 'New York', '#F0F', 'Pennsylvania', '#FF0', '#AAAAAA']
    }
});

mapbox expression match文档指出您可以使用“文字值数组,其值必须全部是字符串或全部数字(例如 [100, 101] 或 ["c", "b"])。如果数组中的任何值匹配,则输入匹配,类似于已弃用的“in”运算符。'

但是我上面的例子并没有像我预期的那样工作。如何格式化表达式以将这些样式作为数组读取? (注意:此示例应用程序可以很好地使用直接匹配,因为纽约和宾夕法尼亚州的值是硬编码的,但我的实际应用程序具有动态上传的多边形,因此它们在运行时是未知的。)

最佳答案

您的问题只是 Javascript 语法问题。 statesAndColors 是一个数组,而您需要传入数组的各个值。您可以使用展开运算符 (...) 来执行此操作。

所以,改变这个:

'fill-color': ['match', ['string', ['get', 'state']], statesAndColors, '#AAAAAA']

对此:

'fill-color': ['match', ['string', ['get', 'state']], ...statesAndColors, '#AAAAAA']

(来源:我实际上在您引用的文档中写了这句话:))

关于javascript - 分类数据的 Mapbox 数据驱动样式 - 如何将表达式与数组输入匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59257831/

相关文章:

javascript - v-for 循环中的 Vue.js 引用

javascript - Angular 7如何将内联JS脚本包含到组件中?

javascript - 无法通过 Angular 管道搜索对象数组值

postgresql - 如何有效地将大型 PostGIS (PostgreSQL) 表导出到 GeoJSON 文件?

javascript - 使用 javascript 动态修改 SVG 过滤器

javascript - jQuery Accordion |在页面加载时打开第一个元素和事件状态混淆

javascript - 无法使用 openlayers 显示 pbf(mapbox 矢量切片)

ios - ios 中离线室内导航中的当前位置

javascript - 为什么我用 window.onresize 触发事件时得到了错误的 window.height 值?

angular - flatMap, flat, flatten 在类型 any[] 上不存在