Mapbox 获取带有内插文本大小的表达式

Mapbox Get Expression with Interpolated Text Sizes

我只想为从 FeatureCollection 添加的文本符号添加一个图层。每个功能都有多种文本大小和样式关联,保存在它们的属性中。我一直在使用 Mapbox 提供的数据驱动表达式来分配样式。

在每个特征的属性中有一个名为 'text_size' 的数组,它包含一个内插文本大小,旨在使用 ['get', 'text_size'] 表达式检索。下面显示了一个特征的 'text_size' 属性 内容的示例。

text_size: [
  'interpolate',
  ['linear'],
  ['zoom'],
  18,
  0,
  20,
  8,
  22,
  20
]

问题是 ['get', 'text_size'] 表达式似乎无法设置值。使用表达式 不起作用 的示例代码如下所示。没有抛出任何错误,文本大小只是设置为默认大小。

this.map.addLayer({
        id: `text-dynamic-layer`,
        type: 'symbol',
        source: `dynamic-text-source`,
        layout: {
          'text-size': ['get', 'text_size'],
          'text-font': ['Open Sans Regular'],
          'text-offset': [0.85, -1.7],
          'text-anchor': 'top',
          'text-max-width': 8,
          'text-field': '{name}'
        },
        paint: <any>{
          'text-color': '#FFF',
        },
      });

当直接应用数组而不是使用 ['get', 'text_size'] 表达式检索时,相同的值确实有效。下面显示了在添加不带表达式的图层时 正常工作 使用的代码示例。

this.map.addLayer({
        id: `text-dynamic-layer`,
        type: 'symbol',
        source: `dynamic-text-source`,
        layout: {
          'text-size': [
            'interpolate',
            ['linear'],
            ['zoom'],
            18,
            0,
            20,
            8,
            22,
            20
          ],
          'text-font': ['Open Sans Regular'],
          'text-offset': [0.85, -1.7],
          'text-anchor': 'top',
          'text-max-width': 8,
          'text-field': '{name}'
        },
        paint: <any>{
          'text-color': '#FFF',
        },
      });

知道是什么原因造成的吗?预先感谢您的任何回复。

您不能在特征上存储表达式并以这种方式解释它。好吧,不是 afaik。

如果每个功能都可以为这三个不同的缩放级别设置自己的字体大小真的很重要,我建议直接存储它们并使用如下表达式:

"font-size": ['interpolate', ['linear'], ['zoom'], 18, ['get', 'font18'], 20, ['get', 'font20'], 22, ['get', 'font22']]