QGIS中使用aggregate聚合函数为拼接字段值添加索引的实现方法
实现方案
可以通过aggregate结合数组处理函数实现需求,修改后的代码如下:
with_variable( 'cable_arr', aggregate( layer:='cables', aggregate:='array_agg', expression:= to_string(name), filter:=within(geometry(@parent),buffer($geometry,0.2)) ), array_to_string( array_foreach( generate_series(1, array_length(@cable_arr)), @element || ':' || @cable_arr[@element - 1] ), ',' ) )
逻辑说明
- 先将
aggregate的聚合类型从concatenate改为array_agg,把符合条件的电缆ID存储为数组存入临时变量 - 通过
generate_series生成从1开始、和数组长度相等的序号序列 - 遍历序号序列,拼接序号和对应位置的电缆ID,QGIS数组下标从0开始,因此取元素时需要减1
- 最后将处理后的数组转为逗号分隔的字符串即可
自定义排序(可选)
如果需要按指定规则给电缆排序后再编序号,可以在aggregate函数中添加order_by参数:
aggregate( layer:='cables', aggregate:='array_agg', expression:= to_string(name), filter:=within(geometry(@parent),buffer($geometry,0.2)), order_by:=to_string(name) -- 可替换为其他需要排序的字段 )
内容的提问来源于stack exchange,提问作者franrvr
相关产品推荐
相关产品推荐

