QGIS+Conda+jupyter玩转Python GIS

简介: QGIS+Conda+jupyter玩转Python GIS

1 简介

QGIS随着近些年的发展,得益于其开源免费的特点,功能不断被世界各地的贡献者们开发完善,运算速度也非常出色,使得越来越多的Giser们从臃肿缓慢的Arcgis等传统平台转向QGIS

图1

最重要的是,QGIS面向Python的接口PyQgis不仅可以用来开发QGIS插件,还可以配合Conda完美地避开路径配置的过程,直接与Conda虚拟环境集成在一起,从而随心所欲地在jupyter notebook之类的编辑器中书写Python代码调用各种QGIS中的地理计算功能,进而弥补geopandas在某些功能上的尚未完善之处。

图2

本文就将为大家展示如何集成QGISConda环境里,并基于建好的环境在jupyter lab中调用QGIS从而解决实际计算问题。

2 配置环境&功能演示

接下来我们从0开始,完整地展示如何构建QGIS+Conda+jupyter lab的集成。

在已经正确安装和配置anacondaminiconda的机器上,在终端执行conda create -n QGIS python=3.7 -y来建立一个Python虚拟环境,这里选择3.7版本的Python

图3

接下来我们执行conda activate QGIS激活刚刚创建好的环境之后,接着执行conda install -c conda-forge qgis -y来直接安装QGIS相关组件。

如果你的下载过程非常缓慢且你没有“特殊”的上网技巧,可以将-c参数后的源更换为国内的清华大学对应镜像(https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge),因为QGIS本身有着一定的体积且依赖包众多,这一步耐心等待完成即可。

安装成功后,直接执行qgis命令就可以打开传统的带界面的QGIS应用:

图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

相关文章
|
4月前
|
索引 Python
|
14天前
|
Python
Python软件包及环境管理器conda实战篇
详细介绍了如何使用conda进行Python软件包管理及环境管理,包括查看、安装、卸载软件包,切换源,管理不同版本的Python环境,以及解决使用过程中可能遇到的错误。
45 2
Python软件包及环境管理器conda实战篇
|
20天前
|
定位技术 API C++
Python GIS神器shapely 2.0新版本来了
Python GIS神器shapely 2.0新版本来了
|
19天前
|
数据挖掘 定位技术 API
Python GIS神器geopandas 1.0版本来了
Python GIS神器geopandas 1.0版本来了
|
21天前
|
JavaScript 数据挖掘 Python
conda+jupyter玩转数据科学环境搭建
conda+jupyter玩转数据科学环境搭建
|
19天前
|
数据采集 数据可视化 数据挖掘
利用 Jupyter 实现自动化报告生成 展示如何结合 Jupyter 和 Python 库
【8月更文第29天】为了创建自动化报告,我们可以利用 Jupyter Notebook 结合 Python 的强大库如 Pandas、Matplotlib 和 Seaborn 来处理数据、制作图表,并使用 Jinja2 模板引擎来生成 HTML 报告。这种方式非常适合需要定期生成相同类型报告的情况,比如数据分析、业务报表等。
16 1
|
20天前
|
C++ Python
VS Code 搭建 Python 环境 Conda管理
VS Code 搭建 Python 环境 Conda管理
31 2
|
20天前
|
存储 数据可视化 前端开发
7个Pandas&Jupyter特殊技巧,让Python数据分析更轻松
7个Pandas&Jupyter特殊技巧,让Python数据分析更轻松
|
20天前
|
Shell Python 容器
利用Conda尝鲜Python 3.10
利用Conda尝鲜Python 3.10
|
1月前
|
数据可视化 IDE 数据挖掘
揭秘Conda:Python开发者必备的包管理神器
揭秘Conda:Python开发者必备的包管理神器
39 1