Python 一键获取全国市县级行政单元Shapefile文件
之前的博客中介绍到利用区县级shp转市级shp的方法Arcgis制作全国行政区(精确到县级),但实际操作起来还是比较麻烦的,并且部分省份没有BOUA文件。今天,分享另外一个方法,利用Python迅速获取全国市县级单元的Shapefile文件。
目录
- 一、矢量数据文件下载
- 二、获取市级行政单元Shapefile
- 三、获取县级行政单元Shapefile(2021.2.16更新)
一、矢量数据文件下载
这里推荐两个网站,一个是高德地图的区划矢量数据高德地区API,另外一个是阿里云的区划矢量数据阿里云矢量数据,如下图所示(左图为高德,右图为阿里云)
不难看出,高德地图中的重庆市是没有各个区县单元的(其他直辖市也都没有),而阿里云中是含有各个区县单元。此外,高德地图的精度要高于阿里云。
注:若阿里云旁边没有下载按钮,可以按照如下方式自行创建json文件
以下载宣城市数据为例
1. 复制红框中第一条或第二条网址,用浏览器打开
访问API结果如下:
2. 复制网址中全部内容,放入自行创建的json文件中。(可以先自行创建txt文件,复制完内容后,直接更改后缀名即可变为json文件)
个人推荐:如果需要直辖市的区县数据可以使用阿里云的区划数据,其他省份的用高德地图会精确一点。
两个网站最终下载下来都是json类型的矢量数据文件(高德是geojson)
二、获取市级行政单元Shapefile
这里借助python中强大的空间分析库geopandas即可将geojson文件转为shapefile文件。但是geopandas库安装起来还是比较麻烦的!(直接pip会报错,它依赖于这四个库gdal、Shapely、Fiona、pyproj,详细安装流程可参考geopandas安装心得
安装完成后,在python中执行以下命令即可输出得到shapefile
import geopandas
import os
os.chdir('C:/Users/dell/Desktop/') #工作路径转为桌面
def saveShapefile(file_name,output_shapefile_name):try:data = geopandas.read_file(file_name) localPath = str(output_shapefile_name)data.to_file(localPath, driver='ESRI Shapefile', encoding='gbk') print("转化成功,文件存放位置:"+localPath)except:print("转化失败")
saveShapefile('安徽省.geojson','Anhui_province')
当然,不借助geopandas,利用其他在线工具也可以将json文件转为shapefile文件,但生成的dbf文件可能会乱码!(因为dbf文件需要gbk编码格式才能正常显示中文)
最终生成文件如下左图所示,dbf文件内容(可正常显示)如右图所示:
三、获取县级行政单元Shapefile(2021.2.16更新)
基本思想为:先获取所有区县的json文件,再将其转为Shapefile文件。以山东省为例,基本步骤如下所示
1. 进入阿里云矢量数据网站,复制山东省的矢量数据API,如下图所示:
注:有些省份两个API都能用,有些省份可能第一条API放入如下代码中会报错,尽量复制第二条API
2. 执行下述代码,即可得到山东省所有区县的json文件
import requests
import json
import re
import os
os.chdir('c:/users/dell/Desktop/')def get_data(url):r = requests.get(url)data = r.json()['features']return datadef get_json(url,file_name):pattern = '\d+'output = {"type": "FeatureCollection","features":[]}data = get_data(url)with open(file_name,'w') as f: for city in data:city_code = city['properties']['adcode']url = re.sub(pattern,str(city_code),url)city_data = get_data(url)if city_data:output['features'].extend(city_data)print(city['properties']['name']+'下所有区县保存完毕')else: #考虑部分省份存在市级单元以下无县级单元new_url = 'https://geo.datav.aliyun.com/areas/bound/geojson?code=' + str(city_code)other_data = get_data(new_url)output['features'].extend(other_data)print(city['properties']['name']+'已为最小行政单元,保存完毕')json.dump(output,f,indent=4)
if __name__=='__main__':url = 'https://geo.datav.aliyun.com/areas/bound/geojson?code=370000_full' #复制的APIget_json(url,'山东省.json')
部分结果如下所示:
3. 转化Shapefile,此部分代码与市级转化基本一致
import geopandas
def saveShapefile(file_name,output_shapefile_name):try:data = geopandas.read_file(file_name) localPath = str(output_shapefile_name)data.to_file(localPath, driver='ESRI Shapefile', encoding='gbk') print("转化成功,文件存放位置:"+localPath)except Exception as e:print(e)
saveShapefile('山东省.json','ShanDong_province')
在Geoda中加载生成的Shapefile文件,如下图所示:
注意:阿里云矢量数据还是比较新的(目前更新于2020年4月),部分省份的县级行政单元个数可能与全国地理基础信息网存在出入!!!
以上就是本次分享的全部内容~
Python 一键获取全国市县级行政单元Shapefile文件相关推荐
- 获取clientheight为0_用10行python代码获取全国城市交通生活圈
今天在网上冲浪看到一个很花哨的数据,全国各城市主要商圈从早上6点到晚上10点的20min,30min,45min,60min,90min生活圈轮廓. 1 获取思路 按下F12 按下F12,点击淮海路可 ...
- Python 一键获取市县级城市经纬度信息
目录 一.数据来源 二.全部代码 三.使用介绍 3.1 获取全省所有地级市经纬度信息 3.2 获取某个地级市下所有区县经纬度信息 3.3 获取全省所有区县经纬度信息 一.数据来源 本文所涉及的市.县级 ...
- python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码
最近有这样一需求,需要获取12123交管查询网站上的全国每个城市对应的城市id和车牌代码.最初的想法是直接用Python写个爬虫,遍历每个城市,然后用Xpath提取DOM节点数据就好了.然而在实际操作 ...
- python如何获取多个excel单元格的值
一. 获取多个单元格的值报错:AttributeError: 'tuple' object has no attribute 'value' 需要读取的sample.xlsx 代码读取的是A3:B10 ...
- Python一键获取某排名第一的手游,所有英雄皮肤(附源码)
目录 最近总是有老妹喊我打王者带她们上分,但是我吧不经常玩,有哪些皮肤,叫什么名字,长啥样都不知道,万一妹妹问起来答不上岂不是很尴尬! 这不得先把功课做足了,于是我用Python把这些皮肤全部给爬下来 ...
- python一键获取豆瓣租房小组前十页信息,并导入EXCEL(Xpath法)
#encoding=utf-8 模块导入 import requests from lxml import etree import xlwt import urllib.request 主程序 de ...
- 教程:获取中国行政单位shapefile文件
1.阿里云地图小工具:http://datav.aliyun.com/tools/atlas 在"范围选择器"中,选择自己需要的行政区域范围,可以下载JSON格式文件. 2.使用免 ...
- 聊天尬住了?教你用Python一键获取斗图表情包,从此摇身变海王
很多兄弟在聊天上没有下太多的功夫,导致自己聊天的时候很容易尬住,然后就不知道聊啥了,这时候合适表情包分分钟就能救场,但是一看自己收藏的表情包,好家伙,两只手都数得过来. 所以今天来给兄弟们分享一下爬取 ...
- 聊天突然尬住?教你用Python一键获取斗图表情包,各种表情包轻松化解尴尬
很多兄弟在聊天上没有下太多的功夫,导致自己聊天的时候很容易尬住,然后就不知道聊啥了,这时候合适表情包分分钟就能救场,但是一看自己收藏的表情包,好家伙,两只手都数得过来. 所以今天来给兄弟们分享一下爬取 ...
最新文章
- 二维码Data Matrix的解码实现(zxing-cpp)
- 岩板铺地好吗_威廉顿岩板1200x2700x9mm,上墙铺地非常好看大气
- duilib控件的一些属性
- [bzoj2456]mode
- Python天天美味(32) - python数据结构与算法之堆排序
- 文件字节输出流 java
- ARM Cortex-M0(6)--- 存储器系统
- 百度昆仑AI芯片已完成研发:明年初量产 由三星代工
- Linux学习——gcc编译C程序
- Oracle日期函数TRUNC
- 两种有趣的排序方法:睡眠排序、猴子排序(golang版本)
- 人工智能“乐高模式”,人工智能进入变革时代
- 关于swiftUI和UIKit混用
- 变量、参数和内存分配
- “互联网+”环境下高职毕业生求职风险应对策略
- Vue批量生成二维码并打包下载
- 微信小程序判断手机系统
- js实现bind函数
- 购买计算机的英语作业,《计算机专业英语》作业.doc
- 微信小程序---双向绑定传参
热门文章
- 张艾迪(创始人):我们接管世界
- 9.8.1 1.打印head标签的内容。2.打印body标签的内容。3.打印id为Hi的标签对象
- 西门子1200 总线控制V90伺服程序模板 两种控制模式 1.基于111报文自己编写的PN通讯控制V90伺服程序
- 懊悔!早一点遇到这份1399页Nginx笔记,我绝不会错过阿里offer!
- C/C++用海伦公式求三角形面积(同时运用条件语句不断优化程序)
- 华为ap WA131SN-NZ设置胖ap开启wifi无线网络
- A-level经济难,但是想学好应该怎么做?
- Tomcat的安装与启动
- 如何对pdf电子文档进行手写签名
- 中国人必须知道的76个常识。。。看了才发现,自己知道的实在太少了。。。