利用Python获取全国GeoJSON数据并预览转换成shp格式文件

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基础数据获取
# -*- coding: utf-8 -*-

"""
@File    : JsonCrawlerLocal.py
@notice  : 将数据GeoJSON文件保存到本地
"""
# 数据下载地址
import json
import requests
import io


# 获取所有数据json文件


def download_Json(url, name):
    print("-----------正在下载json文件 %s" % (url))
    try:
        # 将响应信息进行json格式化
        response = requests.get(url)
        versionInfo = response.text
        versionInfoPython = json.loads(versionInfo)

        # print(versionInfo)
        path = "./data/" + str(name) + ".json"
        # 将json格式化的数据保存
        with open(path, 'w', encoding='utf-8') as f1:
            f1.write(json.dumps(versionInfoPython, indent=4))
        print("下载成功,文件保存位置:" + path)
    except Exception as ex:
        print("--------下载出错----")
        pass


# 数据下载地址
# http://datav.aliyun.com/tools/atlas/#&lat=33.521903996156105&lng=104.29849999999999&zoom=4
# 地名:中国|adcode:100000
# https://geo.datav.aliyun.com/areas/bound/100000.json
# 地名:河南省|adcode:410000
# https://geo.datav.aliyun.com/areas/bound/410000.json
# 地名:河南省+子区域|adcode:410000
# https://geo.datav.aliyun.com/areas/bound/410000_full.json
# 地名:江苏省|adcode:320000
# https://geo.datav.aliyun.com/areas/bound/320000.json
# 地名:山东省|adcode:370000
# 地名:山东省|adcode:340000
# 地名:北京市ad|code:110000

# 获取对应数据的json文件
url = 'https://geo.datav.aliyun.com/areas/bound/320500.json'#输入json地址
download_Json(url, "苏州")
#第一个参数是json文件的地址,第二个参数是文件保存的名称,
GeoJSON数据展示
# -*- coding: utf-8 -*-

"""
@File    : MapDisplay.py
@notice  : 展示geojson生成的数据,并进行投影
"""

import geopandas
from shapely import geometry
import matplotlib.pyplot as plt

#保存在本地的geoJson数据
# 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)#透明样式alpha=0.8
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)
# 绘制bbox框示意,进行重点标记(可以进行注释)
ax = geopandas.GeoSeries([geometry.box(minx=115,  #红框经度(小)
                                      maxx=118,  # 红框经度(大)
                                      miny=34,  #红框纬度(小)
                                      maxy=36)##红框纬度(大)
                        .boundary]).plot(ax=ax, color='red')
plt.savefig("./images/MapDisplayMoreProvince.png")#保存图片到项目images路径下
plt.show()
保存 GeoJSON数据为shapefile到本地
# -*- coding: utf-8 -*-

"""
@File    : MapDisplay.py
@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

#第一个参数是输入爬取GeoJSON的名称,
# 第二个参数是输出shapfile的名称(默认投影为wgs1984)
saveShapefile('苏州', '苏州市')

小tips:
1.pip升级安装 python -m pip install --upgrade pip -i https://pypi.douban.com/simple
2.python3.7安装geopandas库需要同时安装gdal文件和Fiona文件,参考文章:
如果是下载的文件,需要指定具体路径,如pip install C:\Users\Run\Downloads\pyHook-1.5.1-cp37-cp37m-win_amd64.whl
https://blog.csdn.net/micrasoft007/article/details/112652700
https://blog.csdn.net/weixin_38917807/article/details/81675233
3.为python安装matplotlib模块:
matplotlib是python中强大的画图模块。
首先确保已经安装python,然后用pip来安装matplotlib模块。
进入到cmd窗口下,执行python -m pip install -U pip setuptools进行升级。
接着键入python -m pip install matplotlib进行自动的安装,系统会自动下载安装包。
安装完成后,可以用python -m pip list查看本机的安装的所有模块,确保matplotlib已经安装成功。
参考文章:https://www.cnblogs.com/-1307/p/6529269.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容