1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        QGIS+Conda+jupyter玩轉Python GIS

        共 2943字,需瀏覽 6分鐘

         ·

        2020-08-28 02:49

        點擊上方"藍字"關注我們





        Python大數據分析


        記錄? ?分享? ?成長


        添加微信號"CNFeffery"加入技術交流群

        ?

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

        ?

        1 簡介

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

        圖1

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

        圖2

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

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

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

        在已經正確安裝和配置anacondaminiconda的機器上,在終端執(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相關組件。

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

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

        圖4

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

        conda?install?nodejs?jupyterlab?-y

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

        圖5

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

        圖6

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

        為了方便下面的功能演示我們順便把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(),?'可用!')

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

        圖7

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

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

        import?geopandas?as?gpd

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

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

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

        from?processing?import?algorithmHelp

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

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

        from?processing?import?run

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

        #?獲取投影坐標系下的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漁網測試.geojson'?#?導出到外部GeoJSON文件
        }

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

        QGIS中查看漁網結果:

        圖10

        通過geopandas查看坐標參考系信息:

        圖11

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


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

        加入我們的知識星球【Python大數據分析】

        愛上數據分析!




        · 往期精選 ·
        1

        原來Python自帶了數據庫,用起來真方便!

        2

        pandas參數設置小技巧

        3

        高效的10個Pandas函數,你都用過嗎?




        Python大數據分析

        data creates?value

        掃碼關注我們

        瀏覽 113
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            熟女自拍偷拍 | 性生交大片免费视频法国 | 中国女人一级片 | 少妇交换做爰史实 | 久久久久99精品成人片免费观看 | 狠狠色丁香婷婷综合久久片 | 麻豆日逼| 天天操操操综合网 | 99国产精品久久久久久久成人热 | 久草在线视频福利资源站 |