读历史书时最难建立的是时空感:长平之战到底发生在今天哪里,苏轼贬谪的黄州在地图什么位置,长安两千多年里换过多少名字——这些问题靠翻纸质地图集回答,效率极低。开源项目 jiangshan-map(江山时序)(源码) 给出了一份惊艳的答案:一张覆盖战国(公元前 403 年)至今两千四百多年的交互式羊皮纸地图,拖动时间轴就能看王朝兴衰,点击古城就能追溯千年沿革,甚至能跟着苏轼的脚步一站站走完他的贬谪之路。项目曾登上 GitHub Trending 日榜第二,作者还写了一篇从教科书地图到千星仓库的创作故事。
更难得的是它的工程姿态:零依赖零构建的纯静态站点、GPL-3.0 开源、并且把 AI Agent 集成做成了原生能力——模型不需要猜坐标,两个语义参数就能驱动整张地图。本文按"概览、四大功能、AI 原生设计、本地部署、数据与许可、技术要点、适用场景、总结"组织全文。
1、概览
江山时序把中国历史装进一张地图:十八个历史时期、两千四百多年跨度、多个政权并立绘制(战国七雄、三国、五代十国、宋辽西夏大理)、历史名城与雄关要塞标注、编年大事与在位君主同步显示。数据源头是学术级资源——谭其骧《中国历史地图集》、哈佛与复旦合建的 CHGIS、Hartwell 历史 GIS 数据集,配合公开的 SRTM 高程数据渲染地形晕渲。
它的形态是三个产品合一:面向人的交互地图、面向嵌入的 iframe 组件、面向 AI 的工具接口。三者共享同一套 URL 参数协议,这是后文要展开的亮点。
2、四大功能
2.1、疆域时间轴
核心交互是拖动时间轴:疆域随之切换,在位君主与年号实时显示,战国到清的政权以高对比羊皮纸色系并列呈现。领土变迁的关键节点——秦并巴蜀、汉开河西、元设宣政院、1881 年曾纪泽收回伊犁、1946 年秋海棠变雄鸡——每个节点切换时,前一阶段的边界以朱红虚线叠加显示,称为"幽灵边界",得失一目了然。
地理要素也随时代联动:黄河改道、云梦泽与罗布泊的盈缩、历代长城、隋唐大运河、丝绸之路与郑和航线,都在各自的时代出现或消失。
2.2、城市溯源
点击地图上任意古城或关隘,弹出该地两千四百年的行政沿革卡片:从战国秦汉的郡、唐的道、宋的路到元明清的行省与现代城市,逐朝代列出名称与建制的演变,帝都还有专属徽标。每个朝代条目下附带发生在当地的大事——咸阳的商鞅变法与秦灭六国、长安的玄武门之变、临安的岳飞之死。点击事件直接跳转到那一年,时空双向打通。
2.3、人物年表
通用搜索框支持搜索任意历史人物,开启"点人溯事"模式后,人物的每个人生节点以细线弧段标注在变迁的疆域之上:秦始皇的灭六国之战、张骞的凿空西域、玄奘的西行求法、李白的壮游、苏轼的贬谪、王阳明的悟道与平叛。逐步推进时,年份、君主、年号、疆域与人物脚步同步演进,并配以在该地写下的诗文原文。
2.4、地图猜谜
彩蛋功能"舆图定位":隐藏城市名,凭朝代线索在盲图上落点标注,按大圆距离计分,十轮结束后授予太史令、职方郎中之类的古代官职称号。历史地理学习 gamification 的教科书示范。
3、AI 原生设计
这个项目对 AI 的友好程度超过多数商业产品,整条链路如下:
设计的核心洞察是:模型不该猜坐标。经纬度对 LLM 是最容易幻觉的字段,而"年份加地名"两个语义参数模型几乎不会出错——把 AI 适配层压缩到两个参数,可靠性问题就从架构上消解了。三种接入形态层层递进,对比如下:
| 接入方式 | 形态 | 适合场景 |
|---|---|---|
| URL 参数协议 | ?year=819&place=蓝关 |
零成本分享与嵌入 |
| MCP 服务器 | stdio 协议三个工具 | Claude Desktop 与 Cursor |
| 技能包 | SKILL.md 加 CLI 截图脚本 | Claude Code 等全局技能 |
URL 协议还支持多维表达:单点定位(0D)、同年多站路线(1D,如杜甫"即从巴峡穿巫峡"的还乡路)、跨年时空路线(4D,苏轼四州贬谪逐年配对)。MCP 服务器是零依赖的本地脚本,五个毫秒内离线响应,暴露查地点、查人物、全文搜索三个工具。CLI 脚本一条命令输出带标注的截图,供 Agent 工具调用后直接交付。
4、数据与许可
许可结构值得注意,它是分层的,各部分约束如下:
| 数据 | 来源 | 许可 |
|---|---|---|
| 疆域与国界示意 | 多源汇编 | GPL-3.0 |
| 郡州府级边界 | CHGIS V6 与 Hartwell | 学术非商业,原条款保留 |
| 地形晕渲 | SRTM 等公有领域数据 | 只发布约一公里以上分辨率影像 |
| 现代省界参考 | DataV GeoAtlas | 遵循其开放条款 |
也就是说整体 GPL-3.0 之下,府级边界数据的学术限制被明确豁免出来——这种"混合许可、逐层标注出处"的做法,是历史 GIS 类项目处理数据版权的正确姿势。作者同时声明历史疆界为示意性近似而非精确勘界,引用时应当注意。
5、本地部署与技术要点
部署几乎零门槛:仓库本身就是一个静态站点,克隆后任意 HTTP 服务器即可运行,官方路径如下:
git clone https://github.com/DeanChensj/jiangshan-map.git
cd jiangshan-map
python3 -m http.server 8000
没有构建步骤、没有 npm 依赖,Docker 路线也只是一层 nginx:alpine 静态服务。对二开者,仓库提供 GeoJSON 导出脚本,把内部紧凑拓扑转换为标准 RFC 7946 格式,可直接喂给 Leaflet、MapLibre 或 QGIS,还附带一个按需加载单时期快照做 bbox 点包含测试的定位库——地理计算的老问题给了现成答案。
十八个时期的演进全貌如下:
从三家分晋到现代省界,一条时间轴走完两千四百年——这个跨度本身就是产品野心最好的注脚。
6、适用场景
四类用户各取所需。历史爱好者与教育者:直接用在线版,键盘快捷键加深度链接可以把任意历史瞬间做成可分享的课件链接,iframe 嵌入博客或课程页面也是官方支持的姿势。文史研究者:城市沿革卡与大事年表是快速检索工具,注意边界为示意性质,学术引用需回到谭图与 CHGIS 原始数据。
AI 应用开发者:这个项目示范了"给模型设计接口"的正确方法论——两个语义参数、三种接入形态、毫秒级离线响应,任何想把地图能力接入 Agent 的人都值得抄这份作业。前端与 GIS 工程师:零依赖静态架构、紧凑拓扑压缩、按需快照加载,都是性能工程的实用样本。
7、与同类项目对比
历史地图赛道上它并非孤例,定位差异如下:
| 项目 | 侧重 | 交互形态 |
|---|---|---|
| 江山时序 | 中国通史时空一体 | 时间轴拖拽与人物路线 |
| 谭其骧图集纸质版 | 学术权威 | 静态分册 |
| CHGIS | 数据层 | 数据集与工具 |
| aourednik 历史底图 | 全球范围简版 | 网页浏览 |
| 观沧海等网站 | 地图叠加 | 图层切换 |
它的差异化在于把时间维做成了主交互轴——多数历史地图网站是"选朝代看地图",它是"拖时间轴看连续演变",再叠加人物轨迹与 AI 接口,形成了完整的产品闭环。
8、总结
江山时序证明了一个人也能做出学术级数据与产品级体验兼具的作品:十八个时期的疆域演化、两千四百年的城市沿革、逐站推进的人物年表,背后是对谭图与 CHGIS 的认真整理;而零坐标双参数的 AI 接口设计,又让它在 Agent 时代拿到了新的入场券。普通读者建议从在线版的时间轴拖起,点开长安的沿革卡感受一下;开发者优先读它的 llms.txt 与 MCP 实现;教育工作者则可以直接把深度链接嵌进课件——历史第一次可以被"拖动"着学。
如果你想看真实扫描的历史地图原貌,推荐阅读 OldMapsOnline:可能是地表第二强的历史地图网站——海量扫描地图的免费检索引擎,与本篇的交互时序地图互为补充。


