<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          QGIS+Conda+jupyter玩轉(zhuǎn)Python GIS

          共 2943字,需瀏覽 6分鐘

           ·

          2020-08-28 02:49

          點擊上方"藍(lán)字"關(guān)注我們





          Python大數(shù)據(jù)分析


          記錄? ?分享? ?成長


          添加微信號"CNFeffery"加入技術(shù)交流群

          ?

          本文完整代碼及數(shù)據(jù)已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

          ?

          1 簡介

          QGIS隨著近些年的發(fā)展,得益于其開源免費的特點,功能不斷被世界各地的貢獻(xiàn)者們開發(fā)完善,運算速度也非常出色,使得越來越多的Giser們從臃腫緩慢的Arcgis等傳統(tǒng)平臺轉(zhuǎn)向QGIS。

          圖1

          最重要的是,QGIS面向Python的接口PyQgis不僅可以用來開發(fā)QGIS插件,還可以配合Conda完美地避開路徑配置的過程,直接與Conda虛擬環(huán)境集成在一起,從而隨心所欲地在jupyter notebook之類的編輯器中書寫Python代碼調(diào)用各種QGIS中的地理計算功能,進(jìn)而彌補(bǔ)geopandas在某些功能上的尚未完善之處。

          圖2

          本文就將為大家展示如何集成QGISConda環(huán)境里,并基于建好的環(huán)境在jupyter lab中調(diào)用QGIS從而解決實際計算問題。

          2 配置環(huán)境&功能演示

          接下來我們從0開始,完整地展示如何構(gòu)建QGIS+Conda+jupyter lab的集成。

          在已經(jīng)正確安裝和配置anacondaminiconda的機(jī)器上,在終端執(zhí)行conda create -n QGIS python=3.7 -y來建立一個Python虛擬環(huán)境,這里選擇3.7版本的Python。

          圖3

          接下來我們執(zhí)行conda activate QGIS激活剛剛創(chuàng)建好的環(huán)境之后,接著執(zhí)行conda install -c conda-forge qgis -y來直接安裝QGIS相關(guān)組件。

          如果你的下載過程非常緩慢且你沒有“特殊”的上網(wǎng)技巧,可以將-c參數(shù)后的源更換為國內(nèi)的清華大學(xué)對應(yīng)鏡像(https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge),因為QGIS本身有著一定的體積且依賴包眾多,這一步耐心等待完成即可。

          安裝成功后,直接執(zhí)行qgis命令就可以打開傳統(tǒng)的帶界面的QGIS應(yīng)用:

          圖4

          但這并不是本文的重點,我們關(guān)注的是如何實現(xiàn)在jupyter lab里寫代碼調(diào)用QGIS功能,接下來我們來安裝jupyter lab

          conda?install?nodejs?jupyterlab?-y

          安裝完成后我們執(zhí)行jupyter lab來啟動它:

          圖5

          接著我們創(chuàng)建新的notebook,測試一下QGIS是否可以正確導(dǎo)入:

          圖6

          如果你可以成功執(zhí)行上述代碼,那么恭喜你已經(jīng)完成了所有環(huán)境配置工作,因為是集成在conda虛擬環(huán)境中的,所以我們免去了所有配置QGIS相關(guān)路徑的工作(爽翻了是不是~)。

          為了方便下面的功能演示我們順便把geopandas也安裝了:

          conda?install?-c?conda-forge?geopandas?-y

          接下來我們先來查看所有可用的QGIS中的算法功能:

          #?查看可用的所有QGIS功能
          from?processing.core.Processing?import?Processing
          from?qgis.analysis?import?QgsNativeAlgorithms

          Processing.initialize()
          QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
          for?alg?in?QgsApplication.processingRegistry().algorithms():
          ????????print(alg.id(),?"中的",?alg.displayName(),?'可用!')

          輸出的結(jié)果內(nèi)容非常之多,可以說囊括了我們常用的所有QGIS功能,譬如「漁網(wǎng)創(chuàng)建工具」

          圖7

          正好geopandas中沒有現(xiàn)成的創(chuàng)建漁網(wǎng)功能,下面我們就以為「重慶市創(chuàng)建漁網(wǎng)為例」。

          首先我們導(dǎo)入對應(yīng)的重慶市域矢量文件,這里的可視化需要matplotlibdescartes兩個庫的支持,請確保已經(jīng)安裝好它們:

          import?geopandas?as?gpd

          #?從矢量文件創(chuàng)建QGIS圖層
          chongqing?=?QgsVectorLayer('重慶市.geojson')

          gpd.read_file('重慶市.geojson').plot();
          圖8

          接著我們就需要使用到前面打印功能列表時看到的Create grid功能,通過下面的方式可以查看所有在功能列表中出現(xiàn)的算法:

          from?processing?import?algorithmHelp

          #?查看漁網(wǎng)創(chuàng)建工具的說明文檔
          algorithmHelp("native:creategrid")
          圖9

          如果你使用過QGIS中的「漁網(wǎng)創(chuàng)建工具」,通過閱讀上述的參數(shù)說明一定很快就能明白各個參數(shù)的意義,下面我們根據(jù)自己的需求創(chuàng)建10000x10000米的正方形漁網(wǎng):

          from?processing?import?run

          chongqing?=?gpd.read_file('重慶市.geojson')

          #?獲取投影坐標(biāo)系下的bbox信息
          total_bounds?=?chongqing.to_crs('EPSG:2381').total_bounds

          params?=?{
          ????'INPUT':?chongqing,
          ????'TYPE':?2,
          ????'EXTENT':?f'{total_bounds[0]},{total_bounds[2]},{total_bounds[1]},{total_bounds[3]}',
          ????'HSPACING':?10000,
          ????'VSPACING':?10000,
          ????'HOVERLAY':?0,
          ????'VOVERLAY':?0,
          ????'CRS':?'EPSG:2381',
          ????'OUTPUT':?'重慶10000x10000漁網(wǎng)測試.geojson'?#?導(dǎo)出到外部GeoJSON文件
          }

          feedback?=?QgsProcessingFeedback()
          run("native:creategrid",?params,?feedback=feedback)

          QGIS中查看漁網(wǎng)結(jié)果:

          圖10

          通過geopandas查看坐標(biāo)參考系信息:

          圖11

          通過這樣的方式,我們就可以實現(xiàn)在外部編輯器中靈活調(diào)用QGIS工具的目的。


          以上就是本文的全部內(nèi)容,歡迎在評論區(qū)與我進(jìn)行討論~

          加入我們的知識星球【Python大數(shù)據(jù)分析】

          愛上數(shù)據(jù)分析!




          · 往期精選 ·
          1

          原來Python自帶了數(shù)據(jù)庫,用起來真方便!

          2

          pandas參數(shù)設(shè)置小技巧

          3

          高效的10個Pandas函數(shù),你都用過嗎?




          Python大數(shù)據(jù)分析

          data creates?value

          掃碼關(guān)注我們

          瀏覽 113
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩一区二区三区 | 亚洲视频在现观看 | 一起操在线免费观看 | 欧美级一人在线视频播放 | 亚洲成人一区二区 |