【发布时间】:2021-12-27 08:39:14
【问题描述】:
我有一个图层代表多个土地覆盖类别,每个类别都通过代码进行识别。 我想汇总每个类别对于代码子集的对象数量(即从 111:113 我有多少对象,从 114:222 我有多少对象?等等) 我怎样才能从属性表中做到这一点? 我想到了字段计算器,并添加了以下功能:
有人可以帮忙吗?
【问题讨论】:
标签: qgis
我有一个图层代表多个土地覆盖类别,每个类别都通过代码进行识别。 我想汇总每个类别对于代码子集的对象数量(即从 111:113 我有多少对象,从 114:222 我有多少对象?等等) 我怎样才能从属性表中做到这一点? 我想到了字段计算器,并添加了以下功能:
有人可以帮忙吗?
【问题讨论】:
标签: qgis
要使用的表达式是:
count ("code_90", group_by:= "code_90" in (111,112,113))
这会计算字段 code_90 中包含值 111、112 或 113 的特征。
要自动创建一系列值(例如从 114 到 222),请使用以下表达式:
count ("code_90", group_by:= array_contains (generate_series (114,222), "code_90" ))
这会计算包含 114 到 222 值的特征。
要一次计算多个范围的数量,请使用CASE 条件:
case
when array_contains (generate_series (111,113), "code_90" ) then count ("code_90", group_by:= array_contains (generate_series (111,113), "code_90" ))
when array_contains (generate_series (114,122), "code_90" ) then count ("code_90", group_by:= array_contains (generate_series (114,122), "code_90" ))
when array_contains (generate_series (123,133), "code_90" ) then count ("code_90", group_by:= array_contains (generate_series (123,133), "code_90" ))
when array_contains (generate_series (134,144), "code_90" ) then count ("code_90", group_by:= array_contains (generate_series (134,144), "code_90" ))
end
计算以下 4 个范围的特征:111 到 113、114 到 122、123 到 133 和 134 到 144。
相同,但无需为每个范围手动定义一行。在括号内的第 4 行中定义一次范围(这里有 4 个范围:111 到 113 / 114 到 122 / 123 到 133 / 134 到 144),然后获得所有范围的正确计数:
array_max(
with_variable (
'list',
'map(111,113,114,122,123,133,134,144)',
array_foreach(
map_akeys( eval(@list)),
case
when array_contains (generate_series (@element,map_get( eval(@list),@element)), "code_90" )
then count ("code_90", group_by:= array_contains (generate_series (@element,map_get( eval(@list),@element)), "code_90" ))
end
)
)
)
【讨论】: