feat(map): 新增 2D 版百度地图改写 SDK(绕开 GL 版的 Blob Worker 域名问题)
诊断页(第 7 块)拿到 GL 版无法渲染的确切原因:
Uncaught NetworkError: Failed to execute 'importScripts' on 'WorkerGlobalScope':
The script at 'http://api.map.baidu.com/res/webgl/10/worker_wasm_g0l1oe.js' failed to load
Uncaught TypeError: Cannot read properties of null (reading 'TILE_VERSION')
Uncaught TypeError: Cannot convert undefined or null to object
Uncaught TypeError: Cannot read properties of null (reading '_rd')
地图容器 innerHTML 长度 0。
根因:BMapGL 用 Blob Worker 承载渲染核心(new Blob(['importScripts("'+url+'")']))。
SDK 里拼 worker 地址用的是 window.location.host,而 Blob Worker 上下文里没有 window,
改写后的域名在 Worker 内部失效,回落到 api.map.baidu.com —— 该域名走 IPv6 必然失败,
于是 worker 全部加载失败、WebGL 渲染链路中断,地图静默空白(不报错)。
这条路在 IPv6 不通的环境里无法通过改写解决。
改用 2D 版(BMap,v3.0):
- 纯 DOM + 图片瓦片,不使用 WebGL / Worker / WASM
- SDK 仅 260KB,域名引用极少
新增 public/bmap-sdk2d.js(2D 版改写产物):
"//api.map.baidu.com -> "//" + window.location.host + "/bmap-api
"apimaponline0-3.bdimg.com" -> (window.location.host + "/bmap-tile0-3")
改写后校验:bmap-api 引用 1 处、bmap-tile 引用 12 处、
残留 "apimaponlineN.bdimg.com" 0 处、不含 Worker。
(卫星图 apimaponlineN/starpic 的 2 处未改写,普通地图不使用)
诊断页 bmap-test.html 增加第 8 块:加载 /bmap-sdk2d.js 并渲染乌鲁木齐地图,
同时校验容器 innerHTML 与 img 数量,用于确认 2D 改写版是否可用。
复用现有 nginx 代理通道(/bmap-api、/bmap-tile0-3、/bmap-webmap、/bmap-map)。