问题描述
我正在使用Redux状态来更新MapBox源中的坐标数组。最初,我检查是否存在带有ID的源,如果是,则设置源的数据,否则,将源添加到地图。更改redux状态后,它将触发一个效果,该效果将更新geojson对象中要素的坐标,并使用setData更改源。我尝试过删除该层,更改源并添加该层,这只是给了我旧的层(即使源确实已更新)。我还尝试过仅更新源代码,并查看该层是否可以动态更新,但不会。
useEffect(() => {
const geoJsonObj = {
type: 'geojson',data: {
type: 'FeatureCollection',features: []
}
};
for (let i = 0; i < (props.mapRoutes.length); i++) {
geoJsonObj.data.features.push({
type: 'Feature',geometry: {
type: 'Linestring',coordinates: props.mapRoutes[i].geometry.coordinates
}
});
};
const routeLayer = {
id: 'route',type: 'line',source: 'route',layout: {
'line-join': 'round','line-cap': 'round'
},paint: {
'line-color': '#ff3814','line-width': 5,'line-opacity': 0.75
}
};
const jsonString = JSON.stringify(geoJsonObj);
const jsonObj = JSON.parse(jsonString);
if (props.mapRoutes.length) {
if (map.current.getSource('route')) {
map.current.getSource('route').setData(jsonObj);
} else {
map.current.addSource('route',jsonObj);
map.current.addLayer(routeLayer);
};
};
},[props.mapRoutes]);
这些都不起作用,我很难找到如何基于更新的源来更新图层。当我在控制台中检查源代码时,一切似乎都正确,只是无法管理地图上的图层。
任何帮助将不胜感激。
解决方法
我发现了问题,我将原来的geoJson对象用于setData方法而不是数据输入,该数据在对象中太高了。只是一个简单的错误而被忽略了。