50 lines
3.4 KiB
Markdown
50 lines
3.4 KiB
Markdown
# 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),
|
||
也就是从相思湖一直盖到五象新区,正是南宁建成区的跨度(约 20~25 km)。
|
||
20 km 半径 = 40 km 直径;只想圈市中心得用 5~8 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」的本质是**界面缺参照物**,不是算错。以后遇到「大小看起来不对」类反馈,
|
||
先问「用户手上有什么可以量」,而不只是去验算几何。
|