QGIS字段计算器怎么用?常用函数有哪些?
引言:很多刚接触 QGIS 的同学都会问:QGIS字段计算器怎么用?常用函数有哪些? 这个问题看似简单,实际涉及字段类型、表达式语法、坐标系单位、空值处理和批量更新等细节。本文以矢量图层属性表为例,讲清楚 QGIS字段计算器 的基本用法、常用函数和排错方法,帮助你在实际项目中快速完成面积、长度、编号、文本拼接、条件分类等字段计算任务。

背景:QGIS字段计算器主要解决什么问题
背景:QGIS字段计算器 是 QGIS 属性表中最常用的工具之一。它的作用不是“手动填表”,而是根据表达式批量生成或更新字段值。
在日常 GIS 工作中,你可能会遇到这些场景:
- 给每个地块计算面积、周长或中心点坐标。
- 根据行政区代码、名称、等级等字段生成新的分类字段。
- 把多个文本字段拼接成一个完整地址。
- 根据条件判断,把不同要素标记为“合格”“异常”或“待检查”。
- 给图斑、道路、点位批量生成编号。
- 清洗属性表中的空格、大小写、空值和异常文本。
如果用人工逐行编辑,不仅效率低,而且容易出错。字段计算器的优势在于:只要表达式正确,QGIS 会按要素逐条计算,并把结果写入目标字段。
原理:QGIS字段计算器怎么理解表达式
原理:QGIS字段计算器 的核心是“表达式”。表达式可以引用字段、几何对象、数学函数、文本函数、条件函数和变量。QGIS 会对图层中的每一条要素执行一次表达式,并把计算结果写入字段。
例如,一个图层中有字段 name 和 type。表达式:
"name" || '_' || "type"
表示把 name 字段、下划线和 type 字段拼接起来,生成新的文本结果。
再比如:
$area
表示计算当前要素的面积。这里的 $area 是 QGIS 内置的几何函数,用于返回当前要素的面积值。
理解 QGIS字段计算器 时,需要特别注意三个概念:
- 字段名:通常用英文双引号引用,例如
"DLMC"、"name"。 - 文本值:通常用英文单引号引用,例如
'建设用地'。 - 几何计算:面积、长度等结果受图层坐标系单位影响,不能只看表达式是否能运行。
简单说,字段计算器不是 Excel 公式的完全替代品,而是 QGIS 表达式引擎在属性表中的一个应用入口。
步骤:QGIS字段计算器怎么用
步骤:下面以 QGIS 矢量图层为例,演示字段计算器的基本操作流程。不同 QGIS 版本界面可能略有差异,但核心逻辑一致。
1. 打开属性表
- 在 QGIS 图层面板中右键点击目标矢量图层。
- 选择 打开属性表。
- 检查字段名、字段类型和已有数据是否正常。
如果你要修改字段内容,建议先备份原始数据,尤其是 Shapefile、GeoPackage 或项目生产数据。
2. 进入编辑模式
- 在属性表工具栏中点击铅笔图标,启用编辑模式。
- 如果只是预览表达式结果,可以先不保存编辑。
- 确认图层不是只读状态,例如文件未被其他软件占用。
如果图层无法进入编辑模式,常见原因包括文件权限不足、数据源损坏、图层来自只读服务或数据库权限不够。
3. 打开字段计算器
在属性表工具栏点击字段计算器图标。打开后一般会看到几个关键区域:
- 新建字段:创建一个新字段并写入计算结果。
- 更新已有字段:把计算结果写回已有字段。
- 字段类型:选择整数、小数、文本、日期等类型。
- 表达式输入框:编写计算规则。
- 函数列表:选择字段、几何、数学、字符串、条件等函数。
- 预览结果:查看表达式对当前要素的计算效果。
4. 新建字段还是更新已有字段
新手使用 QGIS字段计算器 时,建议优先选择“新建字段”,不要直接覆盖原字段。这样即使表达式写错,也能保留原始属性。
| 操作方式 | 适用场景 | 风险 |
|---|---|---|
| 新建字段 | 计算面积、长度、分类结果、编号、拼接文本 | 风险较低,可检查后再保留 |
| 更新已有字段 | 清洗空格、统一编码、修正字段值 | 风险较高,可能覆盖原始数据 |
5. 设置字段类型
字段类型必须和表达式结果匹配,否则可能出现结果为空、保存失败或数值被截断。
- 面积、长度、比例:通常选择小数型。
- 数量、序号、等级编码:通常选择整数型。
- 名称、分类、拼接结果:选择文本型。
- 日期、时间:选择日期或日期时间类型。
例如计算面积时,字段类型建议选择小数,并设置合适的字段长度和精度。如果字段精度太低,结果可能被四舍五入。
6. 输入表达式并检查预览
在表达式窗口输入函数后,一定要查看预览结果。如果预览为 NULL、报错或类型不对,应先修正表达式,再点击确定。
例如创建一个以平方米为单位的面积字段:
$area
如果要保留两位小数:
round($area, 2)
如果要把面积从平方米换算成公顷:
round($area / 10000, 4)
7. 保存编辑结果
- 点击确定执行字段计算。
- 抽查几条结果是否符合预期。
- 点击保存编辑。
- 关闭编辑模式。
对于正式数据,建议保存前使用排序、筛选和统计功能检查异常值,例如面积为 0、字段为空、分类结果不符合规则等。
QGIS字段计算器常用函数有哪些
QGIS字段计算器常用函数可以按用途分为几何函数、文本函数、数学函数、条件函数、空值处理函数和日期函数。下面列出实际工作中最常用的一组。
1. 几何函数:面积、长度、坐标
| 函数或表达式 | 用途 | 示例 |
|---|---|---|
$area |
计算面要素面积 | round($area, 2) |
$length |
计算线要素长度 | round($length, 2) |
$perimeter |
计算面要素周长 | round($perimeter, 2) |
x($geometry) |
获取点要素 X 坐标 | x($geometry) |
y($geometry) |
获取点要素 Y 坐标 | y($geometry) |
centroid($geometry) |
获取几何中心点 | x(centroid($geometry)) |
需要注意,QGIS字段计算器 计算面积和长度时,结果单位通常与图层坐标系单位有关。如果图层是经纬度坐标系,直接使用 $area 可能得到不符合业务理解的结果。正式计算面积前,建议把数据投影到适合本地区的投影坐标系。
2. 文本函数:拼接、截取、替换
| 函数或写法 | 用途 | 示例 |
|---|---|---|
|| |
拼接文本 | "省" || "市" || "县" |
concat() |
拼接多个值 | concat("name", '-', "code") |
substr() |
截取字符串 | substr("code", 1, 6) |
replace() |
替换文本 | replace("name", ' ', '') |
lower() |
转换为小写 | lower("type") |
upper() |
转换为大写 | upper("code") |
trim() |
去除首尾空格 | trim("name") |
例如把村名和地块编号拼接成一个新字段:
"village" || '-' || "plot_id"
如果字段中存在空格,可以用:
trim("name")
3. 数学函数:取整、四舍五入、绝对值
| 函数 | 用途 | 示例 |
|---|---|---|
round() |
四舍五入 | round("area_m2", 2) |
floor() |
向下取整 | floor("value") |
ceil() |
向上取整 | ceil("value") |
abs() |
绝对值 | abs("diff") |
sqrt() |
平方根 | sqrt("value") |
例如将平方米转换为亩,常用表达式为:
round($area / 666.6667, 2)
这里要再次强调:如果坐标系单位不对,换算公式本身正确也无法保证结果正确。
4. 条件函数:按规则分类
QGIS字段计算器 中最常用的条件函数是 CASE WHEN。它适合把连续数值或已有分类字段转换为新的业务分类。
例如按面积分级:
CASE
WHEN "area_m2" < 1000 THEN '小地块'
WHEN "area_m2" >= 1000 AND "area_m2" < 10000 THEN '中地块'
ELSE '大地块'
END
例如按用地类型编码转换名称:
CASE
WHEN "type_code" = '01' THEN '耕地'
WHEN "type_code" = '02' THEN '林地'
WHEN "type_code" = '03' THEN '建设用地'
ELSE '其他'
END
这种写法比多次筛选再手动填值更稳定,也更容易复查规则。
5. 空值处理函数:避免 NULL 影响结果
属性表中经常存在空值。空值不是空字符串,它表示没有值。很多表达式只要参与计算的字段为 NULL,结果也会变成 NULL。
常用处理方式是 coalesce(),它会返回第一个非空值。
coalesce("name", '未命名')
如果拼接地址字段,可以这样避免空值导致结果异常:
coalesce("province", '') || coalesce("city", '') || coalesce("county", '')
如果要判断字段是否为空,可以使用:
CASE
WHEN "name" IS NULL THEN '缺少名称'
ELSE '正常'
END
6. 编号与行号函数
在制作点位编号、样方编号、巡检编号时,可以使用 @row_number 变量。它表示当前计算过程中的行号。
'P' || lpad(@row_number, 4, '0')
这个表达式会生成类似 P0001、P0002 的编号。
需要注意,行号受当前排序和筛选状态影响。正式生成编号前,最好先按稳定字段排序,例如行政区代码、道路等级或采集时间。
常见坑:QGIS字段计算器结果不对怎么办
常见坑:字段计算器能运行,不代表结果一定正确。下面这些问题在 GIS 数据处理中非常常见。
1. 面积和长度不准
如果你用 $area 或 $length 得到的结果明显不对,优先检查坐标系。
- 图层是否是经纬度坐标系,例如 EPSG:4326。
- 项目坐标系和图层坐标系是否不同。
- 是否需要先重投影到米制投影坐标系。
- 面积单位到底是平方米、公顷还是亩。
对于面积计算,推荐先使用“另存为”或“重投影图层”生成投影坐标系数据,再在新图层中使用 QGIS字段计算器 计算面积。
2. 字段类型选错
如果表达式结果是文本,但字段类型选择了整数,QGIS 可能无法写入正确结果。反过来,如果面积字段被设置成整数,小数部分会丢失。
建议:
- 分类名称、拼接结果选择文本。
- 面积、长度、比例选择小数。
- 编号如果包含字母前缀,必须选择文本。
- 日期不要直接存成普通文本,除非后续只是展示。
3. 字段名和文本值引号混用
QGIS 表达式中,字段名和文本值的引号不要混用。
"name"表示字段。'name'表示普通文本 name。
例如:
"type" = '建设用地'
这里 "type" 是字段名,'建设用地' 是要比较的文本值。
4. 空值导致拼接或计算失败
如果某个字段是 NULL,拼接文本或数学计算可能得不到预期结果。建议使用 coalesce() 处理空值。
coalesce("name", '未填写')
5. 更新已有字段前没有备份
字段计算器执行后,如果你保存了编辑,原字段值就会被覆盖。尤其是批量清洗编码、名称、分类字段时,建议先新建一个临时字段验证结果。
方法比较:字段计算器、处理工具箱和 Python 哪个更适合
方法比较:同样是批量处理属性字段,QGIS 中常见方法包括字段计算器、处理工具箱和 Python 脚本。选择哪种方法,取决于任务复杂度和是否需要自动化。
| 方法 | 适合任务 | 优点 | 限制 |
|---|---|---|---|
| QGIS字段计算器 | 单图层字段计算、面积长度计算、文本拼接、条件分类 | 上手快,界面直观,适合日常编辑 | 复杂批处理和跨图层逻辑不够方便 |
| 处理工具箱 | 字段重构、批量流程、模型构建器处理 | 适合规范化流程,可与其他工具串联 | 参数较多,新手需要理解工具逻辑 |
| Python 或 PyQGIS | 多图层批处理、自动化质检、复杂规则计算 | 可重复、可扩展,适合工程化 | 需要编程基础,调试成本更高 |
如果只是计算面积、生成编号、拼接字段,优先使用 QGIS字段计算器。如果同一套规则要反复处理几十个图层,可以考虑处理工具箱模型或 PyQGIS 脚本。
检查清单:使用QGIS字段计算器前后要检查什么
检查清单:为了减少字段计算错误,建议每次使用 QGIS字段计算器 前后都按下面的清单检查。
计算前检查
- 是否已备份原始数据。
- 图层是否可以编辑,数据源是否只读。
- 字段名是否正确,是否存在中文、空格或特殊字符。
- 目标字段类型是否与表达式结果一致。
- 面积和长度计算是否使用了合适的投影坐标系。
- 是否存在
NULL、空字符串或异常编码。 - 是否需要先筛选部分要素再计算。
计算后检查
- 随机抽查几条要素,确认结果符合业务规则。
- 对数值字段查看最小值、最大值和异常值。
- 对分类字段查看唯一值,确认没有拼写错误。
- 确认是否保存编辑,是否需要另存为新图层。
- 如果是正式成果,记录表达式和坐标系信息,方便复核。
FAQ:QGIS字段计算器常见问题
FAQ:下面整理几个关于 QGIS字段计算器怎么用 和 QGIS字段计算器常用函数 的高频问题。
QGIS字段计算器可以批量计算选中要素吗?
可以。你可以先在属性表或地图窗口中选择要素,然后在字段计算器中选择只更新选中的要素。这样适合对局部数据进行修正,例如只给某个行政区、某类道路或某批点位更新字段。
QGIS字段计算器计算面积为什么不准?
最常见原因是图层使用了经纬度坐标系,单位不是米。面积和长度计算建议使用适合研究区的投影坐标系。先重投影,再计算面积,通常比直接在经纬度图层上计算更可靠。
字段计算器中字段名为什么要用双引号?
双引号用于引用字段名,例如 "name"。单引号用于表示文本常量,例如 '道路'。如果把字段名写成单引号,QGIS 会把它当成普通文字,而不是读取字段值。
QGIS字段计算器能不能生成自动编号?
可以。常用 @row_number 生成行号,也可以结合 lpad() 生成固定长度编号,例如 'A' || lpad(@row_number, 5, '0')。正式编号前建议先排序,避免编号顺序不稳定。
字段计算器表达式报错怎么办?
先检查字段名、引号、括号、字段类型和函数参数。可以从一个简单表达式开始测试,例如只输入某个字段名或简单文本拼接,确认能运行后再逐步加入条件判断和函数。
Shapefile 使用字段计算器有什么限制?
Shapefile 对字段名长度、字段类型和编码支持有限。字段名过长可能被截断,中文字段或中文值可能出现编码问题。对于更稳定的编辑和计算,建议优先使用 GeoPackage。
结论:先理解表达式,再使用QGIS字段计算器
结论:QGIS字段计算器 的核心不是记住所有函数,而是理解字段、表达式、字段类型和坐标系之间的关系。日常工作中,掌握几何函数、文本函数、数学函数、条件函数和空值处理函数,就能解决大部分属性计算问题。
实际使用时,建议遵循一个稳妥流程:先备份数据,再确认坐标系和字段类型,使用表达式预览检查结果,优先新建字段验证,最后再保存编辑。这样可以有效避免面积不准、字段覆盖、空值异常和类型错误等常见问题。
如果你刚开始学习 QGIS,不必一次记住所有函数。先从 $area、$length、round()、concat()、CASE WHEN、coalesce() 这些高频函数入手,就能把 QGIS字段计算器 用在真实项目中了。