初识QGIS表达式

本文介绍了QGIS表达式的基本概念,它是类SQL语言,广泛应用于创建和更新属性字段、要素查询、符号化和打印布局。通过表达式构造器,用户可以方便地构建和使用表达式,实现空间数据的高级操作。后续文章将进一步探讨表达式的各种用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间,《QGIS实操与技巧》专辑中的多篇文章都用到了QGIS表达式(Expression),但受限于篇幅并未对其深入剖析。事实上,表达式是极为强大而灵活的功能,是QGIS很多高级功能得以实现的基础。本文试图从总体上向大家介绍QGIS表达式的基本概念、应用场景与使用方法,后续的文章还会进一步分门别类地深入阐述表达式的诸多用途。

01 什么是表达式

表达式,是将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义的式子。

与常规表达式不同,QGIS中的表达式是构筑在空间数据(字段、变量)和函数(预设函数、自定义函数)的基础上,为操作几何图形和属性数据、地图符号化、打印布局输出提供了强大的工具。

很多人对QGIS中的表达式到底是哪种编程语言感到疑惑,实际上它是一种类SQL语言,支持SQL语法的一个子集,从不严谨的角度来看,可以把表达式看成一句简单程序语句。因此,要理解和深入使用表达式,需要一点SQL语言基础和编程思维。

02 表达式的典型应用场景

在QGIS中,表达式应用之广泛达到令人惊叹的程度,在大部分的酷炫出图效果、高级的查询、繁琐复杂的数据更新中,都能看到表达式的身影。

  • 创建或者更新属性字段

在【字段计算器】中,表达式可基于已有的空间图形特征和属性数据创建字段,也可以按照需求更新已有的属性字段,例如根据几何图形的中心点生成x、y坐标,用人口数量除以面积计算得到人口密度字段等。
在这里插入图片描述

  • 要素查询和选择

要素的查询和选择是空间数据处理的基础操作,表达式是筛选数据的最佳工具,例如从全国城市中找到规模大于200的城市,只需建立条件“城市规模大于200”,所有满足条件的要素便可提取出来。
在这里插入图片描述

  • 符号化的数据定义重载

在地图符号化过程中,需要设置符号的各种属性,例如点的大小、颜色等。这些符号属性可以通过输入常规的数值、颜色值设置,也可以通过表达式来定义其取值。地图渲染引擎实时计算表达式的取值并赋值给相应的符号属性,也就是说,符号的属性忽略输入框给定的数值,取值于表达式计算结果,这个过程叫做符号化的数据定义重载。例如下图表达式执行的结果是:判断城市的规模是否大于等于200,如果是,则符号的大小设置为8,否则符号大小设置为2。

### QGIS 属性表中使用多个表达式的示例 在QGIS中,可以利用字段计算器来创建新的字段或更新现有字段,并通过组合多个表达式实现复杂的数据处理逻辑。下面是一个具体的例子,展示如何在一个操作中应用多个表达式。 #### 创建新字段并计算面积和周长 假设有一个多边形矢量图层,在该图层的属性表里想要增加两个字段分别存储每个多边形要素的实际面积和边界长度: 1. 打开目标图层的属性表; 2. 启动编辑模式; 3. 进入“字段计算器”,勾选“创建虚拟字段”以便于随时更新这些值而不影响原始数据结构; 对于面积字段(命名为`area`),可使用如下表达式: ```sql $area ``` 对于周长字段(命名为`perimeter`),则采用此表达式: ```sql $perimeter ``` 这两个表达式可以直接获取几何对象对应的测量结果[^1]。 #### 组合条件判断与字符串操作 如果希望基于某些特定条件下修改文本型字段的内容,则可以通过嵌套if语句和其他函数完成更复杂的转换工作。例如,当某列中的数值大于某个阈值时改变另一列表项的文字描述: 设有一列名为`value`表示某种指标得分,现在要根据这个分数给定等级标签到新建立的一栏叫作`grade`: ```sql CASE WHEN "value" >= 90 THEN 'Excellent' WHEN "value" BETWEEN 70 AND 89 THEN 'Good' ELSE 'Needs Improvement' END ``` 这里不仅实现了简单的比较运算还加入了范围界定功能[^2]。 #### 文件路径解析及重命名 针对批量导入后的文件可能带有冗余信息的情况,可以运用正则表达式提取有用部分作为最终保存的名字。比如有这样一批来自不同地区的地理空间数据集其全名格式类似:“地区名称_具体项目_mygeodata.shp”。为了去除前缀只保留核心内容可以用以下方式定义输出文件名模板: ```sql regexp_replace( @layer_name , '^.*_(.*)\.shp$', '\\1') ``` 上述命令会匹配整个字符串直到最后一个下划线之后的部分为止,并将其替换为捕获组内的子串即原文件的核心标识[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值