如何使用 mapbox-gl 为特征点设置单独的布局属性?

How to set individual layout properties for feature points with mapbox-gl?

我有一组特征点,不想单独更新每个特征点的某些布局属性。我该怎么做?

这是我目前所拥有的。

const features = getVisibleFeatures();
// This updates all. Not what I wan't. Each feature should have different offset.
map.setLayoutProperty("ports", "text-offset", [5, 5]);

每个功能都应该有自己的 text-offset,基于各自的值。我该如何实现?

更新

@steve-bennett 在下面的评论中提供了一些很好的建议,但遗憾的是它们不适用于布局属性和文本偏移值。

解决方案可以解决这个问题很重要。

经过大量搜索、反复试验,我发现我可以这样做:

map.setLayoutProperty("ports", "text-offset", {
    property: "id",
    type: "categorical",
    stops: [
      ["0", [2, 1]],
      ["1", [2, 0]],
      ["2", [0, 2]],
    ],
    default: [0, 0],
});

"0""1""2"properties.id 字段匹配。所以我可以这样做:

  map.setLayoutProperty("layout-id", "text-offset", {
    property: "id",
    type: "categorical",
    stops: nodes.map((node) => {
      const x = node.vx;
      const y = node.vy;
      return [node.id, [x, y]];
    }),
    default: [0, 0],
  });