Mapbox GL js:如何枚举所有文本字段属性

Mapbox GL js: How to enumerate all textfield properties

是否可以解析 foreach 中的所有 textfield 属性以使用 Mapbox GL js 切换语言? 目标是即使我们从 editor.

层 add/remove 层编写工作代码

编辑 例如在 Mapbox Studio 中,我们可以使用属性编辑器快速将所有 textfields 的值从 {name_en} 更改为 {name_fr}.

example 显示了如何为一层执行此操作。 但是如何解析所有层以找到所有 textfield 以全局更改语言?

好的,如果我没理解错的话,您想更新每一层上的每个文本字段以引用一组新的属性({foo_fr} 与 {foo_en} 或其他),当用户更改语言。

无法自动执行此操作。但是你可以:

  1. 遍历每一层。
  2. 遍历一组可能包含特定语言文本字段的预定义属性。
  3. 每一个更新。

第 2 步中的列表会很短,可能只有 ['text-field']。所以基本上是:

var newLanguageCode = 'ru';

map.getStyle().layers.forEach(layer => {
  if (layer.type === 'symbol' && layer.layout && layer.layout['text-field'] !== undefined) {
    map
      .setLayoutProperty(layer.id, 'text-field', layer.layout['text-field']
      .replace(/\{([^_]+)_..\}/, '{_' + newLanguageCode + '}');
  }
})