「GIS教程」利用Python获取全国GeoJSON数据并预览转换成shp格式文件
文 / fungis
一个热带生活、乐于分享、努力搬砖的giser
前段时间看到下载全国的GeoJSON格式数据(精确到县级)的文章,吸引了我的注意,点进去的确干货满满,可以下载到全国GeoJSON格式数据。我就在在想能不能不用gis桌面软件,把GeoJSON数据直接转换为shapefile。首先我想到了用js,以前也做过类似的demo,但是这货不太给力,弃了。然后就想到了Python,了解一番后发现了geopandas库。
GeoPandas
GeoPandas是一个开源项目,Pandas是Python的一个结构化数据分析的利器,GeoPandas扩展了pandas使用的数据类型,允许对几何类型进行空间操作,其DataFrame结构相当于GIS数据中的一张属性表,使得可以直接操作矢量数据属性表,其目标是使得在python中操作地理数据更方便。下面是具体步骤:
安装安装 GeoPandas库
我是利用Anaconda3集成环境,所以就直接在cmd命令窗口执行conda install -c conda-forge geopandas。这句话会下载geopandas依赖的一些库,安装时间较长耐心等待就好。 ( 可以从清华大学镜像下载Miniconda。地址是 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/),其他方式都比较复杂一点,网上也很全面,可以自行百度下载,不在细说。
GeoJSON基础数据获取
将阿里云上GeoJSON的数据利用Python保存到本地磁盘上。详细代码请点击底部的「阅读原文」查看。
GeoJSON数据展示
利用GeoPandas读取GeoJSON数据,并利用matplotlib展示出来。
代码如下:
"""
@File : MapDisplay.py
@Author : fungis@163.com
@Time : 2020/02/26 15:41
@notice : 展示geojson生成的数据,并进行投影
"""
import geopandas
from shapely import geometry
import matplotlib.pyplot as plt
data1 = geopandas.read_file('./data/河南.json')
data2 = geopandas.read_file('./data/江苏.json')
data3 = geopandas.read_file('./data/山东.json')
data4 = geopandas.read_file('./data/安徽.json')
fig, ax = plt.subplots()
data1.plot(ax=ax, color="#FDECD2",alpha=1)
data2.plot(ax=ax, color="#FADCE8",alpha=0.8)
data3.plot(ax=ax, color="#DFE2F3",alpha=0.9)
data4.plot(ax=ax, color="#E0ECDF",alpha=0.7)
ax = geopandas.GeoSeries([geometry.box(minx=115,
maxx=118,
miny=34,
maxy=36)
.boundary]).plot(ax=ax, color='red')
plt.savefig("./images/MapDisplayMoreProvince.png")
plt.show()
效果如图:
保存 GeoJSON数据为shapefile到本地
最后就是利用GeoPandas进行数据转换了,代码如下:
"""
@File : MapDisplay.py
@Author : fungis@163.com
@Time : 2020/02/26 15:41
@notice : 将json生成的数据保存到本地
"""
import geopandas
import matplotlib.pyplot as plt
def saveShapefile(file_path, output_shapefile_name):
try:
data = geopandas.read_file('./data/' + str(file_path) + '.json')
ax = data.plot()
plt.show()
localPath = 'output/' + str(output_shapefile_name)
data.to_file(localPath, driver='ESRI Shapefile', encoding='utf-8')
print("--保存成功,文件存放位置:"+localPath)
except Exception as ex:
print("--------JSON文件不存在,请检查后重试!----")
pass
saveShapefile('河南', '河岸省矢量1')
全部代码下载
详细代码请点击底部的「阅读原文」查看下载。
结语
当然geopandas还可以干更多事,比如说读取本地shapefile文件、处理栅格图像、它还自带世界地区底图、世界主要城市底图,可以分解到各个国家进行制图,还可以连接excel、csv文件等进行制图,生成图例与指北针等等。更多精彩,还请大家自己实践。
扩展阅读
「GIS数据」DataV.GeoAtlas 全国GeoJSON数据(县级)打包下载
「图解」ArcGIS 10.6 for Desktop 安装教程(附下载地址)
「图解」ArcGIS 10.4.1 Desktop 完整安装教程(含win7/8/10 32/64位+下载地址+亲测可用)
「解惑」安装ArcGIS License Manager 服务无法启动的解决方案汇总
「分享」 王志强:ArcGIS 10.2操作入门视频教程汇总
「教程」使用ArcGIS(ArcMap)进行简单的缓冲区分析
「视频 」ArcGIS API for JavaScript开发入门教程
「视频」ArcGIS 10.6 for Desktop 安装视频教程
投稿
扫码加小编
一起"稿"GIS
END
291616564(QQ群一)
166408035(QQ群二)
627853279(QQ群三)436386604(QQ群四)
606176554(QQ群五)
946178380(QQ群六)
861271808(QQ群七)
http://malagis.com
长按识别二维码关注我们