调用Mapbox API更新图层显隐时提示source 'composite'未找到
报错根因说明
你遇到的layers[0]: source "composite" not found报错,核心原因是提交给Mapbox样式更新API的请求体缺失了图层引用的source定义,结构不完整。
具体拆解当前请求的问题:
- 你提交的更新载荷仅包含
version、name、layers三个字段,完全没有声明和修改的图层同级的sources配置块 - 你引用的
composite不是Mapbox内置的全局默认源,是你开启Source compositing选项后,在原样式中自定义的多tileset合并矢量源。这个源的定义只会存在于原有样式的sources字段中,API不会自动为你的请求体补全未显式声明的source配置 - 你当前的提交逻辑会直接用上传的JSON全量替换原有样式,替换后的新样式对象里没有定义任何source,却要求图层引用名为
composite的源,自然会触发找不到源的报错。
可落地的解决步骤
- 调整全量更新的请求体结构,保证提交的样式是自包含的完整结构:把你从原样式JSON中提取的
sources块完整复制到请求里,和layers、name、version字段同级。正确的结构参考:
{ "version": 8, "name": "OnStreet-V2", "sources": { "composite": { // 原样式里composite源的完整定义,直接从下载的样式JSON里全量复制即可 "type": "vector", "url": "mapbox://对应你的账号合成源的访问地址" } }, "layers": [ { "id": "pay_ds-torres-vedras-livre", "type": "fill", "source": "composite", "source-layer": "Estacionamento_Livre", "layout": { "visibility": "none" }, "paint": { "fill-color": "hsl(101, 53%, 41%)", "fill-opacity": 0.3 } } // 原样式中其余需要保留的图层按原顺序补充在这里,不要遗漏 ] }
- 复制原有图层配置时,记得删掉之前提取图层信息时带入的编辑器残留字符串
enter code here,避免JSON格式解析错误。 - 如果不想每次更新都上传全量的source和图层配置,可以改用Mapbox样式API的局部PATCH更新能力,直接定向修改目标图层的
layout.visibility属性,不需要重复上传整个样式内容。 - 校验配置细节:确认
layers数组中每个图层的source字段值,和sources块中定义的键名完全一致,没有拼写、大小写的偏差。
内容的提问来源于stack exchange,提问作者Carlos Almeida
相关产品推荐
相关产品推荐

