本文完整代碼及數據已上傳至個人
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotesnode
QGIS
隨着近些年的發展,得益於其開源免費的特色,功能不斷被世界各地的貢獻者們開發完善,運算速度也很是出色,使得愈來愈多的Giser
們從臃腫緩慢的Arcgis
等傳統平臺轉向QGIS
。python
最重要的是,QGIS
面向Python
的接口PyQgis
不只能夠用來開發QGIS
插件,還能夠配合Conda
完美地避開路徑配置的過程,直接與Conda
虛擬環境集成在一塊兒,從而爲所欲爲地在jupyter notebook
之類的編輯器中書寫Python
代碼調用各類QGIS
中的地理計算功能,進而彌補geopandas
在某些功能上的還沒有完善之處。git
本文就將爲你們展現如何集成QGIS
到Conda
環境裏,並基於建好的環境在jupyter lab
中調用QGIS
從而解決實際計算問題。github
接下來咱們從0開始,完整地展現如何構建QGIS
+Conda
+jupyter lab
的集成。算法
在已經正確安裝和配置anaconda
或miniconda
的機器上,在終端執行conda create -n QGIS python=3.7 -y
來創建一個Python
虛擬環境,這裏選擇3.7
版本的Python
。json
接下來咱們執行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
但這並非本文的重點,咱們關注的是如何實如今jupyter lab
裏寫代碼調用QGIS
功能,接下來咱們來安裝jupyter lab
:工具
conda install nodejs jupyterlab -y
安裝完成後咱們執行jupyter lab
來啓動它:
接着咱們建立新的notebook,測試一下QGIS
是否能夠正確導入:
若是你能夠成功執行上述代碼,那麼恭喜你已經完成了全部環境配置工做,由於是集成在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
功能,譬如漁網建立工具:
正好geopandas
中沒有現成的建立漁網功能,下面咱們就覺得重慶市建立漁網爲例。
首先咱們導入對應的重慶市域矢量文件,這裏的可視化須要matplotlib
和descartes
兩個庫的支持,請確保已經安裝好它們:
import geopandas as gpd # 從矢量文件建立QGIS圖層 chongqing = QgsVectorLayer('重慶市.geojson') gpd.read_file('重慶市.geojson').plot();
接着咱們就須要使用到前面打印功能列表時看到的Create grid
功能,經過下面的方式能夠查看全部在功能列表中出現的算法:
from processing import algorithmHelp # 查看漁網建立工具的說明文檔 algorithmHelp("native:creategrid")
若是你使用過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
中查看漁網結果:
經過geopandas
查看座標參考系信息:
經過這樣的方式,咱們就能夠實如今外部編輯器中靈活調用QGIS
工具的目的。
以上就是本文的所有內容,歡迎在評論區與我進行討論~