qgis - QGIS 3.22从同一层聚合元素
问题描述
我有一层代表几个土地覆盖类别,每个类别都通过代码识别。我想汇总每个类别对于代码子集的对象数量(即从 111:113 我有多少个对象,从 114:222 我有多少个对象?等等)我怎么能从属性表?我想到了字段计算器,并添加了以下功能:
有人可以帮忙吗?
解决方案
要使用的表达式是:
count ("code_90", group_by:= "code_90" in (111,112,113))
这会计算字段中包含值 111、112 或 113 的要素code_90
。
要自动创建一系列值(例如从 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
)
)
)
推荐阅读
- react-native - 在 iOS 上 react-native-maps 本地图块/离线
- language-agnostic - x64 机器上的 8 位读取
- python - 业务季度在 python 中结束
- python - python中的多个饼图尺寸错误
- api - 如何使用公钥保护 Web API 免受未经授权的访问?
- c++ - 如何在 NS-3 中模拟期间更改两个节点之间的数据速率?
- visual-studio-2017 - 错误 MSB3073 命令“ng build --aot”以代码 9009 退出
- azure - 将 .Net Framework windows 服务迁移到 Azure PaaS
- java - 使用 OAuth2RestTemplate 请求 HTTPS 资源
- python - 更改列名称类型,Python 3.6