麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「GIS教程」批量抓取全国GeoJSON数据(DataV.GeoAtlas)方法

在之前的文章中《利用Python获取全国GeoJSON数据并预览转换成shp格式文件》中介绍了使用 Python 下载DataV.GeoAtlas地图边界数据的方法,但在留言中有不少朋友告诉我使用 Python 爬虫抓数据要坐牢,吓到宝宝了,于是今天宝宝再给大家分享一个不用 Python 爬虫来批量下载全国GeoJSON矢量边界数据的方法。毕竟一个一个点,也是个不体力活不是。

DataV Geo

环境要求

推荐 MacOS Terminal (Mac原生自带),或者用 Linux 也行,也是原生自带 Terminal。实在不行,Windows也可以,但在 Windows 上需要安装 Windows Terminal,或者其他第三方 Terminal 工具。

PS:本文所有操作是在 MacOS 下操作完成,其他平台请大家自行测试,如有问题欢迎反馈。

抓取思路

使用命令行来做这个事情,不太方便像Python一样,让它先点哪个按钮再点哪个按钮(主要我水平太菜)。我们先观察一下数据结构,如下图:

全国数据:

全国GeoJSON数据

省级数据:

四川省GeoJSON数据

地级市数据:

成都市GeoJSON数据

到这就不难发现下面的规律:

全国数据:

下载全图的数据只有一个,直接下载就好。即:https://geo.datav.aliyun.com/areas/bound/100000_full.json

省级数据:

下载所有省级数据只要有所有省份的 adcode,并构造出一个下载地址就好,比如:

甘肃:https://geo.datav.aliyun.com/areas/bound/620000_full.json

内蒙古:https://geo.datav.aliyun.com/areas/bound/150000_full.json

以此类推,地级市数据和省级类似,不过把 adcode 换成了各个地级市的而已。那怎样下载所有的adcode?我们再观察,回到原网站上,有个Excel下载按钮,我们先下载下来看看。

全国GeoJSON Excel

打开看:

excel格式全国属性数据

这里点击 province、city、district 即可下载各个级别的属性数据。点击下载:

下载excel格式全国属性数据

数据格式如下:

excel格式全国属性数据格式

至此我们的抓取思路就完整了,如下:

  1. 抓取所有的省级adcode
  2. 抓取所有地级市的adcode
  3. 构造url批量下载

准备工具

  1. Terminal
  2. wget或者迅雷等任何支持批量下载的工具

数据下载

下面就是实践过程了,先获取所有的省级adcode,下载province标签下的json数据,地址:http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/100000_province.json

提取所有的省级adcode,在Terminal中输入如下命令:

cat 100000_province.json | grep -Eo \"adcode\"\:\"\(\[0-9\]{6}\)\", > provinces.txt

sed 's/\"adcode\"\:\"/https:\/\/geo\.datav\.aliyun\.com\/areas\/bound\//g' provinces.txt > tmp.txt

sed 's/\"\,/\_full\.json/g' tmp.txt > provinces.txt && rm tmp.txt

wget -i provinces.txt

执行完之后,所有的省级GeoJSON数据就下载下来了。

省级GeoJSON数据

省级GeoJSON数据

地级市的数据下载方法与省级一致,只需要把上面命令源文件换一下即可,这里就不赘述了。

总结

其实这个数据抓取属于非常简单的级别,但万变不离其中,不管是命令行还是Python、Node,不管是MacOS还是Linux、Windows,我们要学会善于思考,善于使用各类工具来解决各类问题。

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

已有 2 条评论

  1. 麻辣GIS-我
    1#
     · 2022-11-07 15:05

    提取所有的省级adcode,在Terminal中输入如下命令:这个命令是什么啊

      1. 麻辣GIS-Sailor
        Sailor  · 2022-11-08 21:44

        Linux命令行,Windows原生的cmd是不支持的。

留言板(小编看到第一时间回复)