我使用带有符号的图层在地图上绘制命令,此命令具有状态。当状态改变时,我想改变符号的颜色。
我的图层有这样的配置:
map.addLayer({
id: "orders",
type: "symbol",
source: "order-markers",
layout: {
"icon-image": [
"match",
["get", "orderStatus"],
"UNASSIGNED",
"unassigned-marker",
"ASSIGNED",
"assigned-marker",
"IN_TRANSIT",
"intransit-marker",
"CONCLUDED",
"concluded-marker",
"UNASSIGNED-marker",
],
},
});
});
是否有推荐的方法直接访问源并更新属性对象中的状态?还是总是用setData覆盖整个数据对象?
我试图在React中创建一个带有功能的状态,但似乎功能对象不会对状态变化做出反应。
谢谢。
我还没有找到一种方法来更新单个特性上的单个属性。我一直做的是覆盖你所提到的数据(即map.getSource('order-markers').setData(/*...*/)
)与整个数据对象,其中一个功能的属性被改变。这是mapbox在他们的示例中使用的实时数据更新方法:live-update-feature
但是,作为一种替代方法,您可以更新单个特性的状态。如果有可能,你可以使用map.setFeatureState. 例如:
map.setFeatureState(
{
source: 'order-markers',
id: feature.id,
}, {
status: "IN_TRANSIT"
}
);
然后你必须更新你的图层样式/表达式,使用state
而不是property
来正确反映数据,因为它们在如何获得值方面略有不同。