从零搭一个行政区划边界数据服务:架构与数据模型复盘
前面九篇把坐标系、格式、坐标、加速、Serverless、数据建模、付费、SEO 都拆过了。最后这篇做个总复盘,把 GeoJSONcn 这个全国行政区划边界数据服务(省市区县乡镇四级,4.6 万页)的架构和数据模型串一遍。你会发现,所谓复杂系统,大多是几个朴素原则的组合。
一、先定数据模型
一切从数据开始。四级行政区划,本质是棵树:
省 (34)
├─ 市 (364)
│ ├─ 区县 (2800+)
│ │ └─ 乡镇街道 (43000+)
每级一个 Feature,properties 里带 name / code / level / 父级code。树靠 code 父子关联。边界几何用 Polygon,坐标统一 WGS84(前面坐标系那篇讲过为什么)。
数据模型定清楚,后面所有功能(钻取、搜索、渲染)都是它的衍生。
二、构建期预渲染:4.6 万页怎么来
不 SSR 现算,而是写个生成脚本,把每级每个页面提前烤成静态 HTML:
- 省市区县乡镇页:模板加对应 GeoJSON 数据,循环生成 4.6 万个 .html;
- 文章页:Markdown/HTML 源转静态页。
构建产物就是一堆文件,躺平等访问。
三、边缘交付:让用户就近拿到
链路设计:
浏览器
→ 阿里云 ESA(国内边缘,30天缓存,忽略源站缓存时间)
→ Cloudflare Worker(路由 + 轻加工,如相关阅读注入)
→ Cloudflare R2(静态文件源)
原则:热点冻边缘、源站零加工、压缩交边缘。这一条让几万页国内秒开。
四、静态为主,Serverless 补"活"
纯静态满足不了"相关阅读自动关联"这类动态需求。解法:把小数据丢 KV,Worker 边缘轻加工(前面 KV+Worker 那篇详述)。静态负责快,Serverless 负责活,两者不冲突。
五、产品层的取舍
- 预览免费、下载付费:水印在显示层、导出用数据重画(无水印),鉴权客户端体验加服务端交付校验;
- 坐标系坚持 WGS84:保留真相基线,展示时按需转 GCJ-02;
- 完整中国地图:陆地加海岸线加南海诸岛加十段线加岛屿,一样不落。
六、SEO 是副产品不是主战场
架构对了(快、规范、有外链),SEO 自然来。canonical 聚权重、sitemap 拆索引、技术文章外发平台做外链。别本末倒置去堆关键词。
这套架构能抄到哪
你不一定是做地图的。凡是内容相对固定、页面巨多、读多写少的场景,文档站、商品站、博客、黄页,这套组合都适用:
1. 构建期预渲染海量静态页; 2. 边缘缓存扛住访问; 3. 需要动态的部分用 KV 加 Worker 补; 4. 付费/鉴权按"显示层 vs 数据层"分离; 5. SEO 靠规范加速度加外链。
写在最后
这个项目里每个技术点,单独看都不神秘。坐标系、格式转换、Canvas 渲染、边缘缓存、KV、canonical,把它们按"静态优先、边缘优先、分层分离"的原则串起来,就撑起了一个能扛 4.6 万页的服务。
如果你正好需要全国四级行政区划的 WGS84 边界数据(省市区县乡镇),或者想在线预览编辑 GeoJSON,欢迎来 GeoJSONcn 逛逛。数据免费预览,下载按需付费,导出的文件干干净净不带水印。
这十篇就到这儿。从坐标系到架构,希望能给你做地理数据或海量静态站时一点参考。有坑一起踩,有活一起干。