用 AI 编写栅格计算器和字段计算器公式
本文介绍如何在昕图中使用 AI 辅助编写栅格计算器和字段计算器公式,包括适用场景、提问方式、检查重点和多个实用示例。
很多人第一次接触表达式计算时,思路其实是清楚的,但一到真正下手写公式,问题就来了。
- 波段号容易写错
where(...)套多层时很容易漏括号- 逻辑条件一复杂,就开始怀疑自己到底有没有写反
- 想得到的是“人口密度”“风险等级”“高程分带”,但脑子里想的是业务规则,不是公式语法
现在昕图里的栅格计算器和字段计算器都支持 AI 编写公式了。更直接一点说,你可以先把需求用人话说出来,再让 AI 帮你整理成当前窗口能直接运行的表达式。
这篇文章主要讲 3 件事:
- 哪些场景适合用 AI 写公式
- 怎样提问更容易一次生成正确结果
- 栅格计算器、字段计算器、属性表中的计算字段分别怎么用
AI 写公式适用场景
如果只是 a + b 这种很简单的表达式,自己手写往往更快。
AI 真正省时间的,通常是下面几类情况:
- 你知道业务规则,但不想手工把它翻译成公式
- 你需要写多层
where(...)的分类逻辑 - 你要同时处理多个条件,担心括号和优先级出错
- 你已经写了一版公式,但想改成更清晰的多行结构
- 你要用面积、长度、波段、空值判断这些容易混的内容
简单理解就是:只要你已经开始担心“我是不是哪写错了”,就很适合先让 AI 帮你起草一版。
如何使用AI 生成公式
1. 你到底想算什么
不要只说“帮我写个公式”。
更好的说法是:
- “计算 NDVI”
- “把高程分成 4 类”
- “根据人口和面积计算人口密度”
- “给道路按长度分级”
2. 你要用哪些字段、栅格或波段
这一点越具体越好。
例如:
影像A.tif.band4和影像A.tif.band3Population和AREAslope、rain
如果名字说得不准,AI 生成出来的结果通常也会偏。
3. 边界条件怎么划分
这是最容易出错的地方。
比如不要只说“分成 4 级”,最好说成:
小于等于 1610 为 1,大于 1610 且小于等于 2415 为 2,大于 2415 且小于等于 3468 为 3,其余为 4。
这样 AI 才能把区间边界写完整,不容易出现重叠或遗漏。
4. 空值要怎么处理
这个很重要,但也最容易被忽略。
你可以直接告诉 AI:
- “如果有空值就输出空值”
- “空值按 0 处理”
- “分母为 0 时输出 nan”
如果这一点不说清楚,最后结果可能看起来能算出来,但业务含义其实不对。
栅格计算器里怎么用 AI 写公式
栅格计算器适合做逐像元计算,比如指数、掩膜、重分类、加权叠加、多波段组合等。
比较常见的用法有这些:
- 遥感指数,例如 NDVI、NDBI
- 高程、坡度、降雨等栅格的阈值提取
- 按区间重分类
- 多个栅格按权重合成综合评价结果
可以加载模板,模板中有准备好的数据

示例 1:让 AI 写 NDVI
你可以直接这样说:
用 空飞-多波段栅格-100m.tif 的 band4 和 band2 计算 NDVI。
AI 很可能会给你一版接近下面这样的公式:
result = (空飞-多波段栅格-100m.tif.band4 - 空飞-多波段栅格-100m.tif.band2) / (空飞-多波段栅格-100m.tif.band4 + 空飞-多波段栅格-100m.tif.band2)
带空值处理的
#prompt
用 空飞-多波段栅格-100m.tif 的 band4 和 band2 计算 NDVI,如果分母为 0 或者有空值就输出 nan。
#公式
nir = 空飞-多波段栅格-100m.tif.band4
red = 空飞-多波段栅格-100m.tif.band2
num = nir - red
den = nir + red
result = where(logical_or(den == 0, logical_or(isnan(nir), isnan(red))), nan, num / den)
这类写法的好处是,AI 不只是把公式写出来了,还顺手把异常情况一起考虑进去了。
注:布尔函数无法进行默认空值处理,必需进行空值处理。

示例 2:让 AI 写重分类
把 dem.tif 分成 4 类:小于等于 100 为 1,大于 100 且小于等于 500 为 2,大于 500 且小于等于 1500 为 3,其余为 4,空值保持为空值。
可能得到:
result = where(isnan(dem.tif), nan, where(dem.tif <= 100, 1, where(logical_and(dem.tif > 100, dem.tif <= 500), 2, where(logical_and(dem.tif > 500, dem.tif <= 1500), 3, 4))))
这种情况特别适合 AI,因为人手写的时候最容易在第二层、第三层 where 里漏掉括号。

示例 3:让 AI 写风险掩膜
根据 slope.tif 和 rain.tif 生成一个风险掩膜:坡度大于 15 且降雨量大于 500 的像元赋值 1,其余赋值 0;如果任一输入是空值,就输出空值。
可能得到:
result = where(logical_or(isnan(slope.tif), isnan(rain.tif)), nan, where(logical_and(slope.tif > 15, rain.tif > 500), 1, 0))

字段计算器里怎么用 AI 写公式
字段计算器更偏属性计算,适合对矢量要素的字段批量生成或更新值。
常见场景包括:
- 计算人口密度、产值密度、覆盖率等指标
- 按规则生成等级字段
- 基于
AREA、LENGTH_GEODESIC这类几何关键字做换算 - 先算一个中间字段,再继续派生第二个字段
示例 1:生成人口密度字段
新增一个 density 字段,计算人口密度,方法为人口 除以面积
可能得到:
density = 人口 / AREA_GEODESIC
注:对于经纬度/大地坐标系的矢量数据,应该使用测地线面积函数 AREA_GEODESIC 计算每个多边形的测地线面积,此时单位为平方米)

示例 2:一次生成两个字段
density= 人口 / 面积,单位为人/平千米,再新增 density_level 字段:小于等于 1000 为 '低',1000 到 3000 为 '中',大于 3000 为 '高'。
可能得到:
density = 人口 * 1000000 / AREA_GEODESIC
density_level = where(density <= 1000, '低', where(density <= 3000, '中', '高'))
这种多步逻辑特别适合 AI,因为它会自动帮你拆成可读性更强的多行。

示例 3:按长度换算公里数
新增 length_km 字段,计算长度,单位为千米。
可能得到:
length_km = PERIMETER_LENGTH_GEODESIC / 1000

属性表里的“计算字段”
除了工具箱中的字段计算器,矢量数据属性表里的【计算字段】同样适合接入 AI 编写公式的思路。

它特别适合这些情况:
- 你已经打开属性表,想顺手补一个业务字段
- 不想切出去再开工具箱
- 只是做当前图层的一次属性计算
例如你在属性表里,想新增一个风险等级字段,可以直接按自然语言描述:
新增 risk_level 字段:当 人口 大于 700000 且 降雨量 大于 700 时为 '高',当 人口 大于 600000 或 降雨量 大于 600 时为 '中',其余为 '低'。
AI 可能会给你:
risk_level = where(logical_and(人口 > 700000, 降雨量 > 700), '高', where(logical_or(人口 > 600000, 降雨量 > 600), '中', '低'))
如果你在属性表里做字段计算,建议额外注意两件事:
- 字段名一定要和当前属性表里完全一致
- 如果涉及面积、长度,先确认当前图层坐标系和几何单位是否符合业务预期
人工检查
AI 能帮你省掉大量重复输入,但不建议“直接复制运行,不看一眼”,人在回路,。
至少建议检查下面几点:
- 栅格名、波段号、字段名有没有写对
- 条件边界是否包含等号
- 区间有没有重叠或漏段
- 空值是不是按你的预期处理
- 面积和长度是不是用了正确的几何关键字
- 输出字段名或结果值是不是符合你自己的命名和业务规则
尤其是分类任务,哪怕 AI 写得再顺,也建议你自己逐档看一遍。
小技巧
如果你已经有一版公式,但看着太绕,可以直接让 AI 帮你改写:
把下面这个单行公式改成更容易检查的多行,并给中间变量起清楚一点的名字。
这比重新让 AI 从头生成更稳,因为你已经把核心逻辑控制住了,AI 只是帮你整理结构。