MVP-3:离线层级选择全球出生地点与历史时区 #45

Closed
opened 2026-08-30 13:55:38 +08:00 by jesse · 2 comments
Owner

Blocked by: #44

背景

用户希望海外出生地点不要依赖搜索,而是像中国地点一样从维护好的位置表中逐级选择。当前 BirthPlacePicker 主要支持中国省/市/区县,全球地点搜索虽已有服务代码但不作为本 MVP 的交互入口。

数据方案

优先使用已维护的开源国家/行政区/城市数据生成项目内静态快照;第一候选为 dr5hn/countries-states-cities-database。不要把完整大表直接打进客户端,按国家或地区拆分/懒加载静态 JSON。地点表只负责选择地点;历史时区和出生时刻 UTC offset 继续走现有服务/星盘引擎。

范围

  • 出生地点切换“中国 / 海外”。
  • 中国继续使用现有省、市、区县选择。
  • 海外使用“国家/地区 → 一级行政区(如有)→ 城市”的级联选择,不使用搜索框。
  • 选中后展示标准地点名、国家/地区、纬度、经度、IANA 时区。
  • 根据出生日期和出生时间确认历史时区及 UTC offset。
  • 未能确认时区时禁止把猜测值写入正式资料。
  • 保留数据来源、许可证和生成时间说明;增加可重复的数据更新脚本。

验收标准

  • 海外常见国家可以通过级联选择完成资料保存,不依赖外部地理搜索接口。
  • 选中的地点刷新后仍可恢复,坐标、IANA 时区和出生时刻 offset 一致。
  • 不因固定 UTC+8 或当前时区替代历史时区。
  • 客户端首屏不加载完整全球城市大表。
  • 数据快照可由脚本重新生成,且测试覆盖至少日本、美国、英国、澳大利亚等跨时区/夏令时样例。
  • 遵守上游数据许可证并在数据文档中记录来源。
Blocked by: #44 ## 背景 用户希望海外出生地点不要依赖搜索,而是像中国地点一样从维护好的位置表中逐级选择。当前 BirthPlacePicker 主要支持中国省/市/区县,全球地点搜索虽已有服务代码但不作为本 MVP 的交互入口。 ## 数据方案 优先使用已维护的开源国家/行政区/城市数据生成项目内静态快照;第一候选为 dr5hn/countries-states-cities-database。不要把完整大表直接打进客户端,按国家或地区拆分/懒加载静态 JSON。地点表只负责选择地点;历史时区和出生时刻 UTC offset 继续走现有服务/星盘引擎。 ## 范围 - 出生地点切换“中国 / 海外”。 - 中国继续使用现有省、市、区县选择。 - 海外使用“国家/地区 → 一级行政区(如有)→ 城市”的级联选择,不使用搜索框。 - 选中后展示标准地点名、国家/地区、纬度、经度、IANA 时区。 - 根据出生日期和出生时间确认历史时区及 UTC offset。 - 未能确认时区时禁止把猜测值写入正式资料。 - 保留数据来源、许可证和生成时间说明;增加可重复的数据更新脚本。 ## 验收标准 - 海外常见国家可以通过级联选择完成资料保存,不依赖外部地理搜索接口。 - 选中的地点刷新后仍可恢复,坐标、IANA 时区和出生时刻 offset 一致。 - 不因固定 UTC+8 或当前时区替代历史时区。 - 客户端首屏不加载完整全球城市大表。 - 数据快照可由脚本重新生成,且测试覆盖至少日本、美国、英国、澳大利亚等跨时区/夏令时样例。 - 遵守上游数据许可证并在数据文档中记录来源。
jesse added the ready-for-agent label 2026-08-30 13:55:38 +08:00
Author
Owner

已完成 GitHub 数据源调研(2026-08-30):

结论:MVP-3 采用原始上游 dr5hn/countries-states-cities-database,不采用海外搜索,也不直接引入第三方运行时 API。

核验结果:

  • 上游最新导出 release:v3.2-export.7,2026-07-29 发布。
  • 数据规模:250 个国家、约 5,308 个一级行政区、约 153k 个城市;提供国家/行政区/城市层级、经纬度、城市 IANA timezone、多语言名称。
  • 可下载 gzipped JSON/CSV/SQLite 等格式;项目 README 明确支持按 release 下载,适合做构建期快照。
  • 许可证:ODbL-1.0,必须保留署名,并在项目文档记录来源、版本/commit、许可证和生成日期。

对比:

  • joelacus/world-cities:有城市、坐标和 timezone,但州/县补全依赖 geocoding API key,不适合本 MVP 的纯离线级联。
  • srestre/world-countries-cities-db:已经拆成按国家/地区文件,适合参考懒加载组织方式,但属于小型二次整理,来源和许可证链更复杂,不作为首选上游。
  • datasets/world-cities:主要是人口 15,000+ 的城市列表,层级和覆盖不足。

实现约束:

  1. 项目内增加可重复的数据生成脚本:下载并固定 v3.2-export.7,生成国家列表及按国家/一级行政区拆分的静态 JSON;不把全量城市表打进首屏。
  2. UI 只做“国家/地区 → 一级行政区(如有)→ 城市”级联;中国继续走现有 china-birth-place。
  3. 上游 city timezone 只作为地点的 IANA 候选;保存前仍调用现有 timezone 服务按出生日期/时间确认历史 offset,不能用固定国家 UTC 偏移替代。
  4. 先覆盖日本、美国、英国、澳大利亚的级联和历史夏令时样例,再扩展全量国家。

上游参考:

已完成 GitHub 数据源调研(2026-08-30): 结论:MVP-3 采用原始上游 `dr5hn/countries-states-cities-database`,不采用海外搜索,也不直接引入第三方运行时 API。 核验结果: - 上游最新导出 release:`v3.2-export.7`,2026-07-29 发布。 - 数据规模:250 个国家、约 5,308 个一级行政区、约 153k 个城市;提供国家/行政区/城市层级、经纬度、城市 IANA timezone、多语言名称。 - 可下载 gzipped JSON/CSV/SQLite 等格式;项目 README 明确支持按 release 下载,适合做构建期快照。 - 许可证:ODbL-1.0,必须保留署名,并在项目文档记录来源、版本/commit、许可证和生成日期。 对比: - `joelacus/world-cities`:有城市、坐标和 timezone,但州/县补全依赖 geocoding API key,不适合本 MVP 的纯离线级联。 - `srestre/world-countries-cities-db`:已经拆成按国家/地区文件,适合参考懒加载组织方式,但属于小型二次整理,来源和许可证链更复杂,不作为首选上游。 - `datasets/world-cities`:主要是人口 15,000+ 的城市列表,层级和覆盖不足。 实现约束: 1. 项目内增加可重复的数据生成脚本:下载并固定 `v3.2-export.7`,生成国家列表及按国家/一级行政区拆分的静态 JSON;不把全量城市表打进首屏。 2. UI 只做“国家/地区 → 一级行政区(如有)→ 城市”级联;中国继续走现有 `china-birth-place`。 3. 上游 city timezone 只作为地点的 IANA 候选;保存前仍调用现有 timezone 服务按出生日期/时间确认历史 offset,不能用固定国家 UTC 偏移替代。 4. 先覆盖日本、美国、英国、澳大利亚的级联和历史夏令时样例,再扩展全量国家。 上游参考: - https://github.com/dr5hn/countries-states-cities-database - https://github.com/dr5hn/countries-states-cities-database/releases/tag/v3.2-export.7
Author
Owner

已完成 MVP-3。实现海外出生地点离线级联选择:国家 → 州/省/地区 → 城市,不再使用搜索;国家索引首屏加载,国家数据按需加载。地点表固定使用 dr5hn/countries-states-cities-database v3.2-export.7(ODbL-1.0),保留经纬度与 IANA timezone 候选,最终仍通过 /api/locations/timezone 按出生日期确认历史时区;未确认时区不会写入可用地点。\n\n验证:16/16 定向测试通过;npx tsc --noEmit 通过;git diff --check 通过。\n\n本地提交:ae9ded623b75c663b69dce38ca7fc77e0baca3f6(尚未 push/deploy)。

已完成 MVP-3。实现海外出生地点离线级联选择:国家 → 州/省/地区 → 城市,不再使用搜索;国家索引首屏加载,国家数据按需加载。地点表固定使用 dr5hn/countries-states-cities-database v3.2-export.7(ODbL-1.0),保留经纬度与 IANA timezone 候选,最终仍通过 /api/locations/timezone 按出生日期确认历史时区;未确认时区不会写入可用地点。\n\n验证:16/16 定向测试通过;npx tsc --noEmit 通过;git diff --check 通过。\n\n本地提交:ae9ded623b75c663b69dce38ca7fc77e0baca3f6(尚未 push/deploy)。
jesse closed this issue 2026-08-30 15:19:34 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: root/Jyotisha#45