从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行

本文描述的是对国家统计局于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

数据采集

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

涉及源码:map_geo.js数据库

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

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

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

2. 处理数据和导出CSV

涉及源码: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 一下。

相关文章
相关标签/搜索