本文描述的是对国家统计局于
2019-01-31
发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。javascript
本文更新(移步查阅): 19-04-15 新采集了2018的省市区三级的坐标和行政区域边界数据csv格式 19-03-22 采集了2018的城市数据html
数据下载 GitHub:github.com/xiangyuecn/…java
坐标和边界是高德地图提供的数据接口;可经过方法转换成其余坐标系的坐标,好比百度地图的。git
省市区三级是国家统计局统计标准《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》,截稿时是最新的。 github
涉及源码:map_geo.js数据库
进入高德地图测试页面,执行代码便可完成抓取,开了4个模拟的线程,采集了3300+数据,首次运行大概2分多钟完成采集。后端
抓取完成后会自动弹出保存文件数据。api
源码里面包含了对不一样地名的处理,有些城市不能直接经过编码或城市名称来查询,高德地图相对于统计局仍是有些滞后。ide
涉及源码:map_geo_格式化.jspost
这个代码比较简单,目前只是起到把数据导出来的做用,里面写了一大堆方法,但运行过一次后发现,基本上能够不用了,由于对数据进行验证部分发现高德的数据很是完美。
代码运行完成就自动弹出保存csv文件数据了。
使用高德接口采集是后面才决定的,由于原本是用百度地图的接口,但数据所有搞完,通过使用发现百度地图数据有严重问题:
参考 肃宁县(右下方向那块飞地)
、路南区(唐山科技职业技术学院那里一段诡异的边界)
边界,百度数据大量线段交叉的无效polygon
(百度地图测试),没有人工没法修正,高德没有这个问题(高德地图测试);
而且高德对镂空性质的地块处理比百度强,参考天津市
对唐山
大块飞地的处理,高德数据只须要Union
操做就能生成polygon
,百度既有Union
操做又有Difference
操做,极其复杂数据还无效。
因此放弃使用百度地图数据。
坐标和边界数据和省市区数据是分开存储的,经过ID
来进行关联。
采集到的csv文件能够导入到数据库内使用,因为POLYGON
须要解析,蛮复杂的,能够参考2019/map_geo_格式化.js内的SQL Server导入用的SQL语句的例子。
若是须要特定的POLYGON
格式,能够根据库里面介绍的字段格式,自行进行解析和验证。
使用过程当中若是遇到多种不一样坐标系的问题,好比请求的参数是WGS-84坐标(GPS)
,咱们后端存储的是高德的坐标,能够经过将WGS-84坐标
转成高德坐标
后进行处理,百度的坐标同样。转换有相应方法,转换精度通常能够达到预期范围,可自行查找。或者直接把高德的原始坐标数据转换成目标坐标系后再存储(精度?)。
SQL Server
中的运行结果(大概2分钟完成POLYGON
的转换,表数据物理存储空间大概300M):
数据下载和相关问题请到 Github查看:github.com/xiangyuecn/…
releases内除了有省市区三级坐标和行政区域边界csv数据外,还有处理好的3级或者4级省市区镇 csv数据提供下载。
若是这个库有帮助到您,请 Star 一下。