本文描述的是对国家统计局于2019-01-31
发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。

本文更新(移步查阅):
19-04-15 新采集了2018的省市区三级的坐标和行政区域边界数据csv格式
19-03-22 采集了2018的城市数据 <https://www.cnblogs.com/xiangyuecn/p/10583865.html>

数据下载 GitHub:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases
<https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases>

边界效果预览




数据来源

坐标和边界是高德地图提供的数据接口;可通过方法转换成其他坐标系的坐标,比如百度地图的。

省市区三级是国家统计局统计标准《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》
<http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html>,截稿时是最新的。


数据采集

1. 调用高德地图接口抓取原始数据

涉及源码:map_geo.js
<https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/blob/master/2019/%E5%9D%90%E6%A0%87%E5%92%8C%E8%BE%B9%E7%95%8C/map_geo.js>

进入高德地图测试页面,执行代码即可完成抓取,开了4个模拟的线程,采集了3300+数据,首次运行大概2分多钟完成采集。



抓取完成后会自动弹出保存文件数据。

源码里面包含了对不同地名的处理,有些城市不能直接通过编码或城市名称来查询,高德地图相对于统计局还是有些滞后。

2. 处理数据和导出CSV

涉及源码:map_geo_格式化.js
<https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/blob/master/2019/%E5%9D%90%E6%A0%87%E5%92%8C%E8%BE%B9%E7%95%8C/map_geo_%E6%A0%BC%E5%BC%8F%E5%8C%96.js>

这个代码比较简单,目前只是起到把数据导出来的作用,里面写了一大堆方法,但运行过一次后发现,基本上可以不用了,因为对数据进行验证部分发现高德的数据非常完美。

代码运行完成就自动弹出保存csv文件数据了。

为什么不采百度的

使用高德接口采集是后面才决定的,因为本来是用百度地图的接口,但数据全部搞完,经过使用发现百度地图数据有严重问题:

参考 肃宁县(右下方向那块飞地)、路南区(唐山科技职业技术学院那里一段诡异的边界) 边界,百度数据大量线段交叉的无效polygon(百度地图测试
<http://lbsyun.baidu.com/jsdemo.htm#c1_10>),没有人工无法修正,高德没有这个问题(高德地图测试
<https://lbs.amap.com/api/javascript-api/example/district-search/draw-district-boundaries>
);

并且高德对镂空性质的地块处理比百度强,参考天津市对唐山大块飞地的处理,高德数据只需要Union操作就能生成polygon,百度既有Union操作又有
Difference操作,极其复杂数据还无效。

所以放弃使用百度地图数据。

如何使用这些数据

坐标和边界数据和省市区数据是分开存储的,通过ID来进行关联。

采集到的csv文件可以导入到数据库内使用,由于POLYGON需要解析,蛮复杂的,可以参考2019/map_geo_格式化.js
<https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/blob/master/2019/%E5%9D%90%E6%A0%87%E5%92%8C%E8%BE%B9%E7%95%8C/map_geo_%E6%A0%BC%E5%BC%8F%E5%8C%96.js>
内的SQL Server导入用的SQL语句的例子。

如果需要特定的POLYGON格式,可以根据库里面介绍的字段格式,自行进行解析和验证。

使用过程中如果遇到多种不同坐标系的问题,比如请求的参数是WGS-84坐标(GPS),我们后端存储的是高德的坐标,可以通过将WGS-84坐标转成高德坐标
后进行处理,百度的坐标一样。转换有相应方法,转换精度一般可以达到预期范围,可自行查找。或者直接把高德的原始坐标数据转换成目标坐标系后再存储(精度?)。

SQL Server中的运行结果(大概2分钟完成POLYGON的转换,表数据物理存储空间大概300M):


最后

数据下载和相关问题请到 Github查看:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov
<https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov>

releases内除了有省市区三级坐标和行政区域边界csv数据外,还有处理好的3级或者4级省市区镇 csv数据提供下载。

如果这个库有帮助到您,请 Star 一下。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信