利用Python獲取全國GeoJSON數(shù)據(jù)并預覽轉(zhuǎn)換成shp格式文件

GeoPandas

GeoPandas是一個開源項目踢星,Pandas是Python的一個結(jié)構(gòu)化數(shù)據(jù)分析的利器,GeoPandas擴展了pandas使用的數(shù)據(jù)類型,允許對幾何類型進行空間操作,其DataFrame結(jié)構(gòu)相當于GIS數(shù)據(jù)中的一張屬性表,使得可以直接操作矢量數(shù)據(jù)屬性表,其目標是使得在python中操作地理數(shù)據(jù)更方便胰耗。下面是具體步驟:

安裝GeoPandas庫

利用Anaconda3集成環(huán)境,所以就直接在cmd命令窗口執(zhí)行conda install -c conda-forge geopandas芒涡。這句話會下載geopandas依賴的一些庫柴灯,安裝時間較長耐心等待就好掂恕。 ( 可以從清華大學鏡像下載Miniconda。地址是 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)弛槐,其他方式都比較復雜一點,網(wǎng)上也很全面依啰,可以自行百度下載乎串,不在細說。

GeoJSON基礎數(shù)據(jù)獲取
# -*- coding: utf-8 -*-

"""
@File    : JsonCrawlerLocal.py
@notice  : 將數(shù)據(jù)GeoJSON文件保存到本地
"""
# 數(shù)據(jù)下載地址
import json
import requests
import io


# 獲取所有數(shù)據(jù)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格式化的數(shù)據(jù)保存
        with open(path, 'w', encoding='utf-8') as f1:
            f1.write(json.dumps(versionInfoPython, indent=4))
        print("下載成功速警,文件保存位置:" + path)
    except Exception as ex:
        print("--------下載出錯----")
        pass


# 數(shù)據(jù)下載地址
# 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
# 地名:河南省+子區(qū)域|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

# 獲取對應數(shù)據(jù)的json文件
url = 'https://geo.datav.aliyun.com/areas/bound/320500.json'#輸入json地址
download_Json(url, "蘇州")
#第一個參數(shù)是json文件的地址叹誉,第二個參數(shù)是文件保存的名稱,
GeoJSON數(shù)據(jù)展示
# -*- coding: utf-8 -*-

"""
@File    : MapDisplay.py
@notice  : 展示geojson生成的數(shù)據(jù)闷旧,并進行投影
"""

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

#保存在本地的geoJson數(shù)據(jù)
# 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,  #紅框經(jīng)度(小)
                                      maxx=118,  # 紅框經(jīng)度(大)
                                      miny=34,  #紅框緯度(忻ψ啤)
                                      maxy=36)##紅框緯度(大)
                        .boundary]).plot(ax=ax, color='red')
plt.savefig("./images/MapDisplayMoreProvince.png")#保存圖片到項目images路徑下
plt.show()
保存 GeoJSON數(shù)據(jù)為shapefile到本地
# -*- coding: utf-8 -*-

"""
@File    : MapDisplay.py
@notice  : 將json生成的數(shù)據(jù)保存到本地
"""

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

#第一個參數(shù)是輸入爬取GeoJSON的名稱酸舍,
# 第二個參數(shù)是輸出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中強大的畫圖模塊。
首先確保已經(jīng)安裝python双妨,然后用pip來安裝matplotlib模塊淮阐。
進入到cmd窗口下,執(zhí)行python -m pip install -U pip setuptools進行升級刁品。
接著鍵入python -m pip install matplotlib進行自動的安裝泣特,系統(tǒng)會自動下載安裝包。
安裝完成后挑随,可以用python -m pip list查看本機的安裝的所有模塊群扶,確保matplotlib已經(jīng)安裝成功。
參考文章:https://www.cnblogs.com/-1307/p/6529269.html

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镀裤,一起剝皮案震驚了整個濱河市竞阐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暑劝,老刑警劉巖骆莹,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異担猛,居然都是意外死亡幕垦,警方通過查閱死者的電腦和手機丢氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來先改,“玉大人疚察,你說我怎么就攤上這事〕鹉蹋” “怎么了貌嫡?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長该溯。 經(jīng)常有香客問我岛抄,道長,這世上最難降的妖魔是什么狈茉? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任夫椭,我火速辦了婚禮,結(jié)果婚禮上氯庆,老公的妹妹穿的比我還像新娘蹭秋。我一直安慰自己,他們只是感情好堤撵,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布感凤。 她就那樣靜靜地躺著,像睡著了一般粒督。 火紅的嫁衣襯著肌膚如雪陪竿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天屠橄,我揣著相機與錄音族跛,去河邊找鬼。 笑死锐墙,一個胖子當著我的面吹牛礁哄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溪北,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桐绒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了之拨?” 一聲冷哼從身側(cè)響起茉继,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚀乔,沒想到半個月后烁竭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吉挣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年派撕,在試婚紗的時候發(fā)現(xiàn)自己被綠了婉弹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡终吼,死狀恐怖镀赌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情际跪,我是刑警寧澤商佛,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站垫卤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏出牧。R本人自食惡果不足惜穴肘,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舔痕。 院中可真熱鬧评抚,春花似錦、人聲如沸伯复。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啸如。三九已至侍匙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叮雳,已是汗流浹背想暗。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帘不,地道東北人说莫。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像寞焙,于是被迫代替她去往敵國和親储狭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容