美文网首页程序员让前端飞
从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运

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

作者: 高坚果兄弟 | 来源:发表于2019-04-15 22:49 被阅读6次

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

    本文更新(移步查阅):
    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需要解析,蛮复杂的,可以参考2019/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 一下。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/uklmwqtx.html