3.4 KiB
3.4 KiB
2026-10-13
排查「专题里的圆大小不随缩放变化」(结论:未能复现,行为是对的)
用户反馈:专题里的圆无论怎么缩放,屏幕上的大小都一样;而且「新圆半径 25km 居然覆盖了整个南宁」。
库里实际存的是 3 个 radiusKm: 20(北海 / 南宁 22.815547,108.367767 / 柳州)。
四处实测(无头 CDP,全部换算回地面公里):
| 位置 | 结果 |
|---|---|
编辑器 L.circle(半径 25) |
z9=178px / z11=710px / z13=2842px(每级翻倍),反算始终 25 km,期望 177/711/2847 —— 吻合 |
| 编辑器「改半径」把手 vs 圆心 | 20.038 km(该圆半径 20 km)—— 位置准确 |
| 前台专题页的迷雾裁剪圆 | z7→z10 像素半径 17→141(应 142),换算始终 ≈20 km |
| 同一缩放改「新圆半径」 | 3→42px、10→142、25→356、50→710,与反算 43/142/355/711 一致 |
⇒ 三处画圆全都是地理锚定的、都随缩放正确变化,半径值也确实生效,复现不出「大小不变」。
「20 km 覆盖整个南宁」是对的——用他自己的数据验证:圆心 20 km 内落了他 477 个地点中的
45 个,最远的是西乡塘的广西民族大学相思湖校区(14.5 km)与良庆的五象万象汇(10.2 km),
也就是从相思湖一直盖到五象新区,正是南宁建成区的跨度(约 2025 km)。
20 km 半径 = 40 km 直径;只想圈市中心得用 58 km。
找到一处真实缺口
后台编辑器的地图没有比例尺(L.control.scale):scaleBar=0(前台专题页 =1)。
画圆时没有任何长度参照,很容易得出现「这个圆怎么这么大/怎么没变化」的判断 ——
大概率就是这次困惑的来源。待办:给它加比例尺;圆列表里把半径的后果写出来(如「20 公里(约 40 公里宽)」)。
排查时的两个自坑(记下来省时间)
- 地图与迷雾 pane 在
load之后还要等/api/map-config回来才初始化:--wait 5会拍到 「pane 不存在」,--wait 8才稳。别把「还没初始化」当成「功能没生效」。 --eval-file里写(async function(){...})()却不加--await,CDP 拿到的是 Promise,returnByValue序列化成{}—— 看着像脚本没执行,其实是漏了参数。
处置:补「参照物」(提交 6aee7e4)
用户选定「加比例尺 + 标注直径」。几何逻辑一行没动 —— 因为问题本来就不在几何:
- 编辑器地图加
L.control.scale(公制,position:'bottomleft',跟前台一致)。 - 新增纯函数
spanLabel(radiusKm):半径 →「约 40 公里宽」(直径);<1 公里改用米, 免得出现「约 0.1 公里宽」。圆列表每行标,「新圆半径」旁边也实时跟着变(落点前就能判断)。 - 守卫
TestTopicAreaEditorGivesSizeReference钉住比例尺与跨度标注(变异验证过)。 ⚠️ 它当场抓到我自己的疏漏:模板的 init 调用漏传spanId,靠脚本默认值兜着 —— 已改成显式传参(新增 opts 时记得在模板里也写出来,否则守卫和外人都看不出这层耦合)。
教训:这次「bug」的本质是界面缺参照物,不是算错。以后遇到「大小看起来不对」类反馈, 先问「用户手上有什么可以量」,而不只是去验算几何。