要使用多个标记更新图层的Mapbox GL setData

要使用多个标记更新图层的Mapbox GL setData,mapbox,mapbox-gl,Mapbox,Mapbox Gl,我有一个Mapbox GL地图,其中有一个图层和该图层上的多个标记,我正在尝试更新一个特定标记,因此我使用setData只更新一个标记,但setData将重置整个图层标记,以仅添加我尝试更新为整个图层上的单个标记的标记,从而删除所有旧标记 尝试将GEOJson格式的多个标记添加为GEOJson对象数组,如下所示,我得到一个错误: Uncaught Error: Input data is not a valid GeoJSON object. 代码: 如果有人能告诉我我做错了什么/遗漏了什么,

我有一个Mapbox GL地图,其中有一个图层和该图层上的多个标记,我正在尝试更新一个特定标记,因此我使用setData只更新一个标记,但setData将重置整个图层标记,以仅添加我尝试更新为整个图层上的单个标记的标记,从而删除所有旧标记

尝试将GEOJson格式的多个标记添加为GEOJson对象数组,如下所示,我得到一个错误:

Uncaught Error: Input data is not a valid GeoJSON object.
代码:

如果有人能告诉我我做错了什么/遗漏了什么,我将不胜感激,谢谢

需要一个完整的GeoJSON对象(不仅仅是它的功能)或指向GeoJSON对象的url

您需要管理代码中GeoJSON的状态,并在进行更改时通过
setData
更新整个对象

var geojson={
“类型”:“FeatureCollection”,
“功能”:[]
};
map.on('load',function()){
map.addSource('自定义'{
“类型”:“geojson”,
“数据”:geojson
});
//向geojson对象添加标记功能
var标记{
键入:“功能”,
几何图形:{
键入:“点”,
坐标:[0,0]
}
};
geojson.features.push(marker);
map.getSource('custom').setData(geojson);
});
这是一个很好的例子,说明了这种行为

          map.getSource('cafespots').setData([{
            "type": "Feature",
            "geometry": {
              "type": "Point",
              "coordinates": [31.331849098205566, 30.095422632059062]
            },
            "properties": {
              "marker-symbol": "cafe"
            }
          },{
            "type": "Feature",
            "geometry": {
              "type": "Point",
              "coordinates": [31.39, 30.10]
            },
            "properties": {
              "marker-symbol": "cafe"
            }
          }]);