从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行
本文描述的是对国家统计局于
2019-01-31
发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。随着时间变化,本文内容会逐渐变旧或失效,请到GitHub仓库查阅最新更新数据。
本文更新(移步查阅):
19-04-15 新采集了2018的省市区三级的坐标和行政区域边界数据csv格式
19-03-22 采集了2018的城市数据数据下载 GitHub:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases
边界效果预览
数据来源
坐标和边界是高德地图提供的数据接口;可通过方法转换成其他坐标系的坐标,比如百度地图的。
省市区三级是国家统计局统计标准《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》,截稿时是最新的。
数据采集
1. 调用高德地图接口抓取原始数据
涉及源码:map_geo.js
进入高德地图测试页面,执行代码即可完成抓取,开了4个模拟的线程,采集了3300+数据,首次运行大概2分多钟完成采集。
抓取完成后会自动弹出保存文件数据。
源码里面包含了对不同地名的处理,有些城市不能直接通过编码或城市名称来查询,高德地图相对于统计局还是有些滞后。
2. 处理数据和导出CSV
涉及源码:map_geo_格式化.js
这个代码比较简单,目前只是起到把数据导出来的作用,里面写了一大堆方法,但运行过一次后发现,基本上可以不用了,因为对数据进行验证部分发现高德的数据非常完美。
代码运行完成就自动弹出保存csv文件数据了。
为什么不采百度的
使用高德接口采集是后面才决定的,因为本来是用百度地图的接口,但数据全部搞完,经过使用发现百度地图数据有严重问题:
参考 肃宁县(右下方向那块飞地)
、路南区(唐山科技职业技术学院那里一段诡异的边界)
边界,百度数据大量线段交叉的无效polygon
(百度地图测试),没有人工无法修正,高德没有这个问题(高德地图测试);
并且高德对镂空性质的地块处理比百度强,参考天津市
对唐山
大块飞地的处理,高德数据只需要Union
操作就能生成polygon
,百度既有Union
操作又有Difference
操作,极其复杂数据还无效。
所以放弃使用百度地图数据。
如何使用这些数据
坐标和边界数据和省市区数据是分开存储的,通过ID
来进行关联。
采集到的csv文件可以导入到数据库内使用,由于POLYGON
需要解析,蛮复杂的,可以参考src/map_geo_格式化.js内的SQL Server导入用的SQL语句的例子。
如果需要特定的POLYGON
格式,可以根据库里面介绍的字段格式,自行进行解析和验证。
使用过程中如果遇到多种不同坐标系的问题,比如请求的参数是WGS-84坐标(GPS)
,我们后端存储的是高德的坐标,可以通过将WGS-84坐标
转成高德坐标
后进行处理,百度的坐标一样。转换有相应方法,转换精度一般可以达到预期范围,可自行查找。或者直接把高德的原始坐标数据转换成目标坐标系后再存储(精度?)。
SQL Server
中的运行结果(大概2分钟完成POLYGON
的转换,表数据物理存储空间大概300M):
最后
最新的数据下载和相关问题请到 Github查看:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov
releases内除了有省市区三级坐标和行政区域边界csv数据外,还有处理好的3级或者4级省市区镇 csv数据提供下载。
如果这个库有帮助到您,请 Star 一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述