QGIS字段计算器怎么用?常用函数有哪些?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

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

QGIS字段计算器怎么用 QGIS字段计算器常用函数示意图
QGIS 字段计算器通常用于新建字段、更新字段值、根据几何或属性表达式批量计算结果。

背景:QGIS字段计算器主要解决什么问题

背景:QGIS字段计算器 是 QGIS 属性表中最常用的工具之一。它的作用不是“手动填表”,而是根据表达式批量生成或更新字段值。

在日常 GIS 工作中,你可能会遇到这些场景:

  • 给每个地块计算面积、周长或中心点坐标。
  • 根据行政区代码、名称、等级等字段生成新的分类字段。
  • 把多个文本字段拼接成一个完整地址。
  • 根据条件判断,把不同要素标记为“合格”“异常”或“待检查”。
  • 给图斑、道路、点位批量生成编号。
  • 清洗属性表中的空格、大小写、空值和异常文本。

如果用人工逐行编辑,不仅效率低,而且容易出错。字段计算器的优势在于:只要表达式正确,QGIS 会按要素逐条计算,并把结果写入目标字段。

原理:QGIS字段计算器怎么理解表达式

原理:QGIS字段计算器 的核心是“表达式”。表达式可以引用字段、几何对象、数学函数、文本函数、条件函数和变量。QGIS 会对图层中的每一条要素执行一次表达式,并把计算结果写入字段。

例如,一个图层中有字段 nametype。表达式:

"name" || '_' || "type"

表示把 name 字段、下划线和 type 字段拼接起来,生成新的文本结果。

再比如:

$area

表示计算当前要素的面积。这里的 $area 是 QGIS 内置的几何函数,用于返回当前要素的面积值。

理解 QGIS字段计算器 时,需要特别注意三个概念:

  • 字段名:通常用英文双引号引用,例如 "DLMC""name"
  • 文本值:通常用英文单引号引用,例如 '建设用地'
  • 几何计算:面积、长度等结果受图层坐标系单位影响,不能只看表达式是否能运行。

简单说,字段计算器不是 Excel 公式的完全替代品,而是 QGIS 表达式引擎在属性表中的一个应用入口。

步骤:QGIS字段计算器怎么用

步骤:下面以 QGIS 矢量图层为例,演示字段计算器的基本操作流程。不同 QGIS 版本界面可能略有差异,但核心逻辑一致。

1. 打开属性表

  1. 在 QGIS 图层面板中右键点击目标矢量图层。
  2. 选择 打开属性表
  3. 检查字段名、字段类型和已有数据是否正常。

如果你要修改字段内容,建议先备份原始数据,尤其是 Shapefile、GeoPackage 或项目生产数据。

2. 进入编辑模式

  1. 在属性表工具栏中点击铅笔图标,启用编辑模式。
  2. 如果只是预览表达式结果,可以先不保存编辑。
  3. 确认图层不是只读状态,例如文件未被其他软件占用。

如果图层无法进入编辑模式,常见原因包括文件权限不足、数据源损坏、图层来自只读服务或数据库权限不够。

3. 打开字段计算器

在属性表工具栏点击字段计算器图标。打开后一般会看到几个关键区域:

  • 新建字段:创建一个新字段并写入计算结果。
  • 更新已有字段:把计算结果写回已有字段。
  • 字段类型:选择整数、小数、文本、日期等类型。
  • 表达式输入框:编写计算规则。
  • 函数列表:选择字段、几何、数学、字符串、条件等函数。
  • 预览结果:查看表达式对当前要素的计算效果。

4. 新建字段还是更新已有字段

新手使用 QGIS字段计算器 时,建议优先选择“新建字段”,不要直接覆盖原字段。这样即使表达式写错,也能保留原始属性。

操作方式 适用场景 风险
新建字段 计算面积、长度、分类结果、编号、拼接文本 风险较低,可检查后再保留
更新已有字段 清洗空格、统一编码、修正字段值 风险较高,可能覆盖原始数据

5. 设置字段类型

字段类型必须和表达式结果匹配,否则可能出现结果为空、保存失败或数值被截断。

  • 面积、长度、比例:通常选择小数型。
  • 数量、序号、等级编码:通常选择整数型。
  • 名称、分类、拼接结果:选择文本型。
  • 日期、时间:选择日期或日期时间类型。

例如计算面积时,字段类型建议选择小数,并设置合适的字段长度和精度。如果字段精度太低,结果可能被四舍五入。

6. 输入表达式并检查预览

在表达式窗口输入函数后,一定要查看预览结果。如果预览为 NULL、报错或类型不对,应先修正表达式,再点击确定。

例如创建一个以平方米为单位的面积字段:

$area

如果要保留两位小数:

round($area, 2)

如果要把面积从平方米换算成公顷:

round($area / 10000, 4)

7. 保存编辑结果

  1. 点击确定执行字段计算。
  2. 抽查几条结果是否符合预期。
  3. 点击保存编辑。
  4. 关闭编辑模式。

对于正式数据,建议保存前使用排序、筛选和统计功能检查异常值,例如面积为 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')

这个表达式会生成类似 P0001P0002 的编号。

需要注意,行号受当前排序和筛选状态影响。正式生成编号前,最好先按稳定字段排序,例如行政区代码、道路等级或采集时间。

常见坑: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$lengthround()concat()CASE WHENcoalesce() 这些高频函数入手,就能把 QGIS字段计算器 用在真实项目中了。