(數據科學學習手札94)QGIS+Conda+jupyter玩轉Python GIS

本文完整代碼及數據已上傳至個人Github倉庫https://github.com/CNFeffery/DataScienceStudyNotesnode

1 簡介

  QGIS隨着近些年的發展,得益於其開源免費的特色,功能不斷被世界各地的貢獻者們開發完善,運算速度也很是出色,使得愈來愈多的Giser們從臃腫緩慢的Arcgis等傳統平臺轉向QGISpython

圖1

  最重要的是,QGIS面向Python的接口PyQgis不只能夠用來開發QGIS插件,還能夠配合Conda完美地避開路徑配置的過程,直接與Conda虛擬環境集成在一塊兒,從而爲所欲爲地在jupyter notebook之類的編輯器中書寫Python代碼調用各類QGIS中的地理計算功能,進而彌補geopandas在某些功能上的還沒有完善之處。git

圖2

  本文就將爲你們展現如何集成QGISConda環境裏,並基於建好的環境在jupyter lab中調用QGIS從而解決實際計算問題。github

2 配置QGIS+Conda+jupyter lab

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

  在已經正確安裝和配置anacondaminiconda的機器上,在終端執行conda create -n QGIS python=3.7 -y來創建一個Python虛擬環境,這裏選擇3.7版本的Pythonjson

圖3

  接下來咱們執行conda activate QGIS激活剛剛建立好的環境以後,接着執行conda install -c conda-forge qgis -y來直接安裝QGIS相關組件。bash

  若是你的下載過程很是緩慢且你沒有「特殊」的上網技巧,能夠將-c參數後的源更換爲國內的清華大學對應鏡像(https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge),由於QGIS自己有着必定的體積且依賴包衆多,這一步耐心等待完成便可。編輯器

  安裝成功後,直接執行qgis命令就能夠打開傳統的帶界面的QGIS應用:ide

圖4

  但這並非本文的重點,咱們關注的是如何實如今jupyter lab裏寫代碼調用QGIS功能,接下來咱們來安裝jupyter lab工具

conda install nodejs jupyterlab -y

  安裝完成後咱們執行jupyter lab來啓動它:

圖5

  接着咱們建立新的notebook,測試一下QGIS是否能夠正確導入:

圖6

  若是你能夠成功執行上述代碼,那麼恭喜你已經完成了全部環境配置工做,由於是集成在conda虛擬環境中的,因此咱們免去了全部配置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功能,譬如漁網建立工具

圖7

  正好geopandas中沒有現成的建立漁網功能,下面咱們就覺得重慶市建立漁網爲例

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

import geopandas as gpd

# 從矢量文件建立QGIS圖層
chongqing = QgsVectorLayer('重慶市.geojson')

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

  接着咱們就須要使用到前面打印功能列表時看到的Create grid功能,經過下面的方式能夠查看全部在功能列表中出現的算法:

from processing import algorithmHelp

# 查看漁網建立工具的說明文檔
algorithmHelp("native:creategrid")
圖9

  若是你使用過QGIS中的漁網建立工具,經過閱讀上述的參數說明必定很快就能明白各個參數的意義,下面咱們根據本身的需求建立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工具的目的。


  以上就是本文的所有內容,歡迎在評論區與我進行討論~

相關文章
相關標籤/搜索