QGIS中如何为生成的网格添加左下角起始的行列编号到属性表
QGIS网格行号列号批量赋值操作方法
推荐使用窗口函数法,无需额外插件,不需要手动录入网格参数,几步即可完成:
操作步骤
- 打开目标网格图层的属性表,点击工具栏的字段计算器按钮(计算器形状图标)
- 新增行号字段
- 输出字段名称填写
行号,输出字段类型选择「整数(整型)」 - 表达式栏输入:
dense_rank() OVER (ORDER BY round($y, 3) ASC) - 点击「确定」等待计算完成即可,计算出的行号默认从左下角最小Y值的网格开始记为1,向上逐行递增
- 输出字段名称填写
- 新增列号字段
- 再次打开字段计算器,输出字段名称填写
列号,输出字段类型选择「整数(整型)」 - 表达式栏输入:
dense_rank() OVER (ORDER BY round($x, 3) ASC) - 点击「确定」完成计算,列号默认从最左侧最小X值的网格开始记为1,向右逐列递增
- 再次打开字段计算器,输出字段名称填写
- (可选)如果需要直接生成
行:列格式的组合编号,可以新建一个文本类型字段,输入表达式:concat("行号", ':', "列号")即可生成你需要的1:1、2:1、1:2这类标识。
补充说明
- 表达式中的
round($y, 3)是为了避免浮点精度误差导致同一行的网格Y值出现微小差异,如果你确认网格坐标精度足够,可以去掉round()函数直接写$y、$x - 如果你使用的QGIS版本不支持窗口函数(仅非常老旧的2.x版本存在该问题),可以使用坐标计算法:
- 行号表达式:
ceil(($y - minimum($y)) / (y_max($geometry) - y_min($geometry))) + 1 - 列号表达式:
ceil(($x - minimum($x)) / (x_max($geometry) - x_min($geometry))) + 1
- 行号表达式:
内容的提问来源于stack exchange,提问作者S7ewie
相关产品推荐
相关产品推荐

