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

如何用R将30m SRTM-DEM转500m并匹配MODIS范围?

解决SRTM DEM与MODIS栅格范围匹配及地形因子计算问题

核心思路

放弃手动分解聚合的方式,直接以MODIS栅格为模板,将30m分辨率的SRTM重采样到完全匹配的500m分辨率、范围和坐标系下,再计算地形因子,从根源解决范围不匹配问题。

具体操作(使用Terra包,R语言)

Terra是替代旧版raster包的高效空间数据处理工具,优先推荐使用。

1. 加载依赖并读取数据

# 安装并加载Terra包
install.packages("terra")
library(terra)

# 读取原始30m SRTM和MODIS栅格文件
srtm_30m <- rast("你的SRTM文件路径.tif")
modis_template <- rast("你的MODIS文件路径.tif")

2. 重采样SRTM到MODIS模板参数

由于两者已处于同一UTM坐标系,直接用resample()函数强制对齐MODIS的栅格系统:

# 重采样,地形数据推荐用双线性插值(bilinear)或均值(average)方法
srtm_500m <- resample(srtm_30m, modis_template, method = "bilinear")

3. 计算地形因子(坡度、坡向)

基于对齐后的500m SRTM直接计算:

# 计算坡度(单位:度)
slope <- terrain(srtm_500m, v = "slope", unit = "degrees")
# 计算坡向(单位:度,0=正北,顺时针递增)
aspect <- terrain(srtm_500m, v = "aspect", unit = "degrees")

4. 验证匹配结果

检查重采样后的SRTM参数是否与MODIS完全一致:

# 查看栅格基本信息
srtm_500m
modis_template

此时两者的dimensions、resolution、extent参数应完全匹配。

原方法出错原因

手动3倍分解+50倍聚合的操作,没有对齐MODIS栅格的原点坐标和边界范围。MODIS栅格的边界是严格对齐到500m网格的整数坐标(如xmin=364000,是500的倍数),而手动聚合后的SRTM原点为非整数的364486.3,自然无法匹配MODIS的栅格系统。

替代方案(使用旧版Raster包)

若习惯使用raster包,操作逻辑一致:

library(raster)

# 读取数据
srtm_30m <- raster("你的SRTM文件路径.tif")
modis_template <- raster("你的MODIS文件路径.tif")

# 重采样对齐
srtm_500m <- resample(srtm_30m, modis_template, method = "bilinear")

# 计算地形因子
slope <- terrain(srtm_500m, opt = "slope", unit = "degrees")
aspect <- terrain(srtm_500m, opt = "aspect", unit = "degrees")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:20:59