人在成都,页面却显示南充:天气定位的调整记录

博客开发记录 · 2026.09.13

一次真实的定位偏差,让天气模块从“显示结果”转向“说明来源、允许纠正,并保留选择”。

天气模块最初只是首页角落的一块小信息:地点、天气和温度。接入实际数据后,却出现了一个明显的问题——人在成都龙泉驿区,页面显示的地点却是南充。

这时,界面虽然有了“真实接口”,展示出来的信息却没有符合使用者的实际情况。

返回了结果,不代表结果适合直接展示

定位和天气查询是两个步骤:先确定地区,再查询这个地区的天气。如果地区本身就不准确,后面的天气即使查询成功,也可能不是访客想看的内容。

当时的现象能够说明:这一次定位来源给出的地区与实际所在位置不一致。但仅凭页面结果,不能进一步断定偏差具体发生在哪一层。

因此,调整的重点没有放在把默认城市写死成成都。那样只会让当前使用者暂时满意,却无法服务其他访客。

把定位来源区分开

当前后端支持三条地区确定路径:

| 来源 | 本项目的处理方式 |

| --- | --- |

| IP 查询 | 使用查询结果中的地区代码继续获取天气 |

| 设备定位 | 将传入坐标转换后查询地区信息,再获取天气 |

| 手动地区 | 根据填写的地址查询地区,要求结果足够明确 |

三种路径没有被包装成同一种“精准定位”。页面需要让人知道,这个地点来自自动查询、设备定位,还是自己的手动选择。

当结果不合适时,访客也能通过重新定位或手动选地区进行纠正。

刷新之后,选择不该消失

另一个问题出现在刷新页面时:地点刚刚调整好,刷新后又回到了不正确的地区。

对应的处理是保存地区选择及其来源,并在后续加载时恢复。这里不只是记住一串城市文字,还需要区分“手动选择”与“上次设备定位”等状态。

这让纠正结果成为一种能够持续生效的选择,而不是一次性的界面变化。

第三方接口失败时怎么办

当前天气服务包含有界缓存和失败冷却。缓存用于减少重复查询,失败后短时间内不持续回源,避免不停触发相同请求。

数据字段也会经过校验:

- 地区代码不完整时,不继续拼接一个看似正常的天气结果。

- 温度无效时,不随便补成某个数字。

- 地区无法确定时,返回可理解的提示。

- 手动地址存在多个匹配结果时,提示补充完整省、市、区县。

相比显示一个错误却完整的卡片,明确表示“暂时无法定位”更容易让人理解当前状态。

目前仍然没有解决所有误差

这些调整提供了来源说明、纠正入口和选择恢复,但不能保证每一次自动定位都准确。

天气卡片里的数据也带有服务方的发布时间,不应该被理解成持续更新的现场测量。阅读这些信息时,需要同时看地区来源和数据时间。

这次调整留下的经验

一个功能的完成标准,不能只有“接口通了”和“页面有数据”。

对天气模块而言,至少还需要回答:

1. 这个地点从哪里来?

2. 如果不对,使用者能怎样纠正?

3. 刷新之后,纠正是否还有效?

4. 查询失败时,页面会不会误导人?

这些问题让一个小小的天气卡片,变成了一次关于信息可信度和交互反馈的练习。

---

系列:雾海手记开发记录 · 02。

页面实录

![所选地区与天气显示](/api/media/3b92e8c997f0daab3e8994e5379b22b8b41cf2bd85efb9758088e134c9b9f802.png)

当前博客天气区域的实际截图。截图时手动选择了成都龙泉驿区,地区来源与天气发布时间会一起显示;这不代表浏览器自动定位一定准确。