摘要:文章接上一篇 《三步教你免费下载省,市,区县行政区Shp数据》,介绍的是不通过任何代码,只是简单的操作实现行政区边界数据的下载,但是一个局限性是只能下载到两级,想要下载区县级行政区只能点击某一个省或市的,本篇介绍如何通过代码下载全国范围内所有的区县级行政区边界数据。

1.分析:如果想要直接下载全国范围的市县行政区,没有直接提供,需要写点代码完成,这也是写代码的灵活之处。根据那篇文章里介绍可知,下载json的API是具备一定规则的,其后缀都是行政区代码,这就提供了下载的可能。比如以河南省为例,其json API 的链接如下,在最后的路径参数上是 [行政区代码_full] 的结构,可以试一下其他行政区的边界,也是一样的方式

https://geo.datav.aliyun.com/areas/bound/ + 行政区代码_full + json后缀格式

那么这个行政区代码,就是我们作为参数要进行替换的,通过逐级的嵌套替换,发起http请求,然后对各级的json解析,取得相应的边界多边形的json。

通过分析该河南省的json对象,他是包含了各个地级市边界要素,每个要素都有字段 adcode,name,childrenNum,level,其中adcode就是我们需要替换的行政区代码,其他的字段可以辅助我们进行判断,比如childrenNum=0时,代表他可能是个直辖市,也可能是已经到了最末级,代表的是一个区或者县;

2.核心代码块:有了以上的分析,大概就清楚,就是通过逐级获得不同层级的http请求,进行迭代,最终获得全国县区级行政区范围的json串,最后将其转换成任意想要的格式,比如上一篇文章中的Shp文件,原理不是很复杂,只是写代码的时候,要多注意下细节,这里给出核心代码,也比较粗糙,可以按照自己的应用自行更改​。

 private static JSONObject getFullChinaJson() {CloseableHttpClient httpclient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(CHINA_FULL_URL);JSONObject result = new JSONObject();result.put("type", "FeatureCollection");JSONArray allDistricts = new JSONArray();try {CloseableHttpResponse response = httpclient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {JSONObject china = JSON.parseObject(EntityUtils.toString(entity, "UTF-8"));JSONArray provinces = china.getJSONArray("features");for (int i = 0; i < 34; i++) {/*省级别信息*/JSONObject provinceJson = provinces.getJSONObject(i);String pAdcode = provinceJson.getJSONObject("properties").getString("adcode");/*直辖市*/int pChildrenNum = provinceJson.getJSONObject("properties").getInteger("childrenNum");if (pChildrenNum == 0) {allDistricts.add(provinceJson);} else {String provinceURL = ALIYUN_DATA_FULL_URL + pAdcode + "_full.json";httpGet = new HttpGet(provinceURL);/*重请求*/response = httpclient.execute(httpGet);entity = response.getEntity();if (entity != null) {JSONObject province = JSON.parseObject(EntityUtils.toString(entity, "UTF-8"));JSONArray cities = province.getJSONArray("features");for (int j = 0; j < cities.size(); j++) {/*到市级别,重请求*/JSONObject cityJson = cities.getJSONObject(j);String cAdcode = cityJson.getJSONObject("properties").getString("adcode");int cChildrenNum = cityJson.getJSONObject("properties").getInteger("childrenNum");if (cChildrenNum == 0) {allDistricts.add(cityJson);} else {String cityURL = ALIYUN_DATA_FULL_URL + cAdcode + "_full.json";httpGet = new HttpGet(cityURL);/*到区县级别,直接写入json,重请求*/response = httpclient.execute(httpGet);entity = response.getEntity();if (entity != null) {JSONObject city = JSON.parseObject(EntityUtils.toString(entity, "UTF-8"));JSONArray districts = city.getJSONArray("features");allDistricts.addAll(districts);}}}}}}}} catch (Exception e) {e.printStackTrace();}result.put("features", allDistricts);return result;}

获取数据可以点击链接

获取全部源代码,可关注公众号后回复 “行政区下载代码”获得。

通过代码下载全国范围详细区县行政区Shp数据相关推荐

  1. python官方下载步骤-Python 下载及安装详细步骤

    安装python分三个步骤: *下载python *安装python *检查是否安装成功 1.下载Python (2)选择下载的版本 (3)点开Download后,找到下载文件 Gzipped sou ...

  2. linux离线安装pyhs2,Python 下载及安装详细步骤

    安装python分三个步骤: *下载python *安装python *检查是否安装成功 1.下载Python (2)选择下载的版本 (3)点开Download后,找到下载文件 Gzipped sou ...

  3. 获取clientheight为0_用10行python代码获取全国城市交通生活圈

    今天在网上冲浪看到一个很花哨的数据,全国各城市主要商圈从早上6点到晚上10点的20min,30min,45min,60min,90min生活圈轮廓. 1 获取思路 按下F12 按下F12,点击淮海路可 ...

  4. AI实战 | Tensorflow自定义数据集和迁移学习(附代码下载)

    自定义数据集 做深度学习项目时,我们一般都不用网上公开的数据集,而是用自己制作的数据集.那么,怎么用Tensorflow2.0来制作自己的数据集并把数据喂给神经网络呢?且看这篇文章慢慢道来. Poke ...

  5. x264 代码重点详解 详细分析

    eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...

  6. Python抓取淘女郎网页信息以及代码下载

    上一篇Python抓取糗事百科网页信息以及源码下载 也是利用python抓取网页信息,轻车熟路,知道一个之后,轻轻松松就是实现啦. 淘女郎网页地址:https://mm.taobao.com/json ...

  7. 全国矢量shp数据:行政区划,县界,道路,河流....都可下载

    前段时间我们分享过一次全国矢量数据,包含道路,水系,铁路等等 不过第二天我们就把文章删除了 以至于后台不少留言问为啥删除 主要原因是数据精度稍微有点差(部分数据偏差过大) 不过 今天我们来重新分享 这 ...

  8. 全国、县区级行政区高程和坡度参数计算结果数据

    基于ASTER Global Digital Elevation Model V003数据计算得到.ASTER Global Digital Elevation Model V003是目前最新的一版全 ...

  9. openwrt针对RT5350代码下载,配置和编译

    最近买了块官方板的RT5350: 先介绍代码下载,以下命令都是用登录用户执行,无须root: mkdir openwrt   //待会代码下载到此目录下 cd openwrt svn   co   s ...

  10. PHP一句话代码下载壁纸

    PHP一句话代码下载壁纸 PHP一句话代码下载壁纸 代码段: //拷贝远程文件需要开启PHP配置文件中的allow_url_fopen=On for($i=0;$i<20;$i++){var_d ...

最新文章

  1. 找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素)(算法导论第三版9.3-8)
  2. ActiveMQ –经纪人网络解释–第4部分
  3. Java常见异常处理
  4. 剑指offer 面试题32 从1到n整数中1出现的次数
  5. 配色方案|平板羽毛集,为你的下个作品做安排
  6. 改变support中AlertDialog的样式
  7. 力扣40. 组合总和 II(JavaScript)
  8. 我在一家通信公司上班
  9. 日志分析代码实现(字符串切割)
  10. 12、阈值分割基础理论
  11. 外设、总线、接口概念辨析
  12. 寒门难出贵子,AI助力教育但问题依然难解
  13. python实现猫抓老鼠
  14. explorer.exe 应用程序错误 应用程序发生异常 未知软件异常 (0xc0000417),位置为 0x100170e9
  15. pcb 受潮_硬盘SATA接口断裂及PCB板受潮_希捷 Barracuda 3TB 7200转 64MB_固态硬盘评测-中关村在线...
  16. win11电脑所有的浏览器都上不了网怎么解决
  17. jQuery Validate详解
  18. arduino uno模拟遥控器控制无刷电机
  19. 十大免费设计资源网站(素材,图库,字体,图标,flash)
  20. P13、14-Windows与网络基础-NTFS之文件、文件夹权限

热门文章

  1. linux 系统清理工具下载,五款最佳Linux文件系统清理工具
  2. [转]coolfire黑客入门教程系列之(五)
  3. 御剑仙侠服务器维护,御剑修仙放置挂机文字游戏
  4. N9程序开发-生成项目
  5. PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)
  6. 服务器硬盘检测工具有哪些,最常用的10大服务器管理工具
  7. MATLAB LSTM多输入单输出 模式分类 示例解析(含代码)
  8. Python科学计算pdf
  9. 潘多拉 搭建 php服务器,OpenWrt/LEDE/潘多拉固件4G网卡上网之【HiLink模式上网教程】...
  10. php如何自动阅卷,智能评卷系统 自动阅卷软件