Javascript 如何使用mapbox gl为要素点设置单独的布局特性?

Javascript 如何使用mapbox gl为要素点设置单独的布局特性?,javascript,mapbox,mapbox-gl-js,mapbox-gl,Javascript,Mapbox,Mapbox Gl Js,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]); 根据各个值,

我有一个要素点数组,不想单独更新每个要素点上的一些布局属性。我该怎么做

这就是我目前所拥有的

const features = getVisibleFeatures();
// This updates all. Not what I wan't. Each feature should have different offset.
map.setLayoutProperty("ports", "text-offset", [5, 5]);
根据各个值,每个功能都应该有自己的
文本偏移量
。我如何做到这一点

更新 @steve bennett在下面的评论中提供了一些很好的建议,但不幸的是,它们不能处理布局属性和文本偏移值


一个解决方案能够处理这个问题是很重要的。

经过大量的搜索、尝试和错误,我发现我可以做到这一点:

map.setLayoutProperty(“端口”、“文本偏移量”{
属性:“id”,
类型:“分类”,
停止:[
["0", [2, 1]],
["1", [2, 0]],
["2", [0, 2]],
],
默认值:[0,0],
});
“0”
“1”
“2”
属性.id
字段匹配。所以我可以这样做:

map.setLayoutProperty(“布局id”、“文本偏移量”{
属性:“id”,
类型:“分类”,
停止:nodes.map((node)=>{
常数x=node.vx;
常数y=node.vy;
返回[node.id[x,y]];
}),
默认值:[0,0],
});

一种解决方案是将每个点添加到单独的层中。然后我可以做
map.queryRenderedFeatures({layers:[“point id”]})
并使用
setLayoutProperty()
,但这似乎不是最佳解决方案。请参阅我对@SteveBennett的回答谢谢。第三个选项对于我的用例来说似乎是最好的,但是看起来它可能不适用于
布局:{text offset:…}
?我得到
错误:图层.端口.布局.文本偏移量[0]:预期数量,找到数组
我将通过将所需偏移量添加到新的“偏移量”中来修改要素,然后将要素添加到地图中,并具有带有“文本偏移量”的样式:[“得到”,“偏移量”]