You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QGIS中如何计算滑雪场多边形区域的平均坡向

计算滑雪场多边形区域内的平均坡向方法

核心注意点

坡向是环形数据(0-360°),不能直接用普通算术平均(比如10°和350°的算术平均是180°,但实际平均方向是0°),必须通过三角函数转换后再计算。


一、桌面GIS工具实现(QGIS/ArcGIS)

QGIS步骤

  1. 生成坡向栅格
    打开栅格 > 分析 > 坡向工具,输入你的DEM数据,输出坡向栅格文件。

  2. 计算坡向的sin/cos栅格
    用栅格计算器生成两个新栅格:

    • 正弦值:sin(radians("aspect@1"))
    • 余弦值:cos(radians("aspect@1"))
  3. 分区统计平均值
    打开矢量 > 分析工具 > 分区统计:

    • 分区图层:选择你的滑雪场多边形GeoJSON
    • 值图层:分别选择刚才生成的sin和cos栅格
    • 统计类型:勾选平均值
      完成后,多边形属性表会新增两个字段(比如sin_mean、cos_mean)。
  4. 计算最终平均坡向
    打开属性表 > 字段计算器,新增计算字段,表达式:

    if(atan2("sin_mean", "cos_mean") * 180 / pi() < 0, atan2("sin_mean", "cos_mean") * 180 / pi() + 360, atan2("sin_mean", "cos_mean") * 180 / pi())
    

    这个表达式会把弧度转成角度,并处理负值(转成0-360°范围)。

ArcGIS步骤

逻辑和QGIS一致:

  1. 用表面分析 > 坡向生成坡向栅格。
  2. 用栅格计算器生成sin/cos栅格。
  3. 用分区统计获取每个多边形的sin/cos平均值。
  4. 在属性表中用字段计算器,通过ATAN2函数转换为平均坡向,处理负值。

二、代码实现(Python+GDAL/GeoPandas)

适合批量处理或自动化场景,以下是核心代码:

import numpy as np
import rasterio
from rasterstats import zonal_stats
import geopandas as gpd
from osgeo import gdal

# 1. 生成坡向栅格
gdal.DEMProcessing('aspect_output.tif', 'your_dem.tif', 'aspect', computeEdges=True)

# 2. 读取坡向栅格并计算sin/cos
with rasterio.open('aspect_output.tif') as src:
    aspect_data = src.read(1)
    affine = src.transform
    nodata = src.nodata

aspect_rad = np.deg2rad(aspect_data)
sin_aspect = np.sin(aspect_rad)
cos_aspect = np.cos(aspect_rad)

# 3. 读取滑雪场多边形
gdf = gpd.read_file('ski_resorts.geojson')

# 4. 分区统计sin/cos的平均值
sin_stats = zonal_stats(gdf, sin_aspect, affine=affine, stats=['mean'], nodata=nodata)
cos_stats = zonal_stats(gdf, cos_aspect, affine=affine, stats=['mean'], nodata=nodata)

# 5. 计算平均坡向并添加到属性
gdf['avg_sin'] = [stat['mean'] for stat in sin_stats]
gdf['avg_cos'] = [stat['mean'] for stat in cos_stats]

gdf['avg_aspect'] = np.rad2deg(np.arctan2(gdf['avg_sin'], gdf['avg_cos']))
# 处理负值,转为0-360°
gdf['avg_aspect'] = gdf['avg_aspect'].apply(lambda x: x + 360 if x < 0 else x)

# 保存结果
gdf.to_file('ski_resorts_with_avg_aspect.geojson', driver='GeoJSON')

内容的提问来源于stack exchange,提问作者spreaderman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:50:11