QGIS如何按难度统计滑雪场范围内雪道的总长度?
解决方法:统计滑雪场范围内不同难度雪道的总长度
针对你的需求,直接在QGIS字段计算器中结合overlay_within/overlay_intersects与array_sum即可实现,无需复杂的函数嵌套。以下是具体操作步骤和表达式:
核心思路
通过空间叠加函数筛选出当前滑雪场多边形范围内的对应难度雪道,提取其长度字段并求和,最终将结果写入滑雪场图层的对应字段。
具体操作(以QGIS为例)
- 打开
ski_mountain图层的属性表,点击顶部的「字段计算器」按钮(算盘图标)。 - 为每个难度类型创建单独字段:
- 选择「新建字段」,设置字段名称(如
beginner)、字段类型为Decimal(建议精度设为2,匹配km单位)。 - 在表达式编辑器中输入对应难度的求和表达式,点击「确定」完成计算。
- 选择「新建字段」,设置字段名称(如
表达式示例
统计完全位于滑雪场内部的雪道总长度
使用overlay_within筛选完全包含在多边形内的雪道:
- 初级雪道(beginner):
array_sum(overlay_within('ski_run', "run_length", filter:="run_difficulty" = 'beginner'))
- 中级雪道(intermediate):
array_sum(overlay_within('ski_run', "run_length", filter:="run_difficulty" = 'intermediate'))
- 高级雪道(advanced):
array_sum(overlay_within('ski_run', "run_length", filter:="run_difficulty" = 'advanced'))
- 专家级雪道(expert):
array_sum(overlay_within('ski_run', "run_length", filter:="run_difficulty" = 'expert'))
统计与滑雪场有交集的雪道总长度(含部分在外部的雪道)
如果需要统计所有和滑雪场多边形相交的雪道(不管是否完全在内部),只需把overlay_within替换为overlay_intersects:
array_sum(overlay_intersects('ski_run', "run_length", filter:="run_difficulty" = 'beginner'))
统计雪道在滑雪场内部的部分长度(若雪道跨多个区域)
如果run_length是雪道的完整长度,而你需要统计雪道落在当前滑雪场内部的实际长度,可使用以下表达式(单位转换为km):
sum( array_foreach( overlay_intersects('ski_run', $currentfeature), if(@element.run_difficulty = 'beginner', length(intersection($geometry, @element.geometry))/1000, 0) ) )
注意事项
- 确保
ski_mountain和ski_run图层使用相同的坐标系,否则空间叠加计算会出错。 - 若雪道图层数据量较大,计算可能需要一定时间,建议先对图层进行空间索引优化。
内容的提问来源于stack exchange,提问作者spreaderman
相关产品推荐
相关产品推荐

