尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

重庆DEM 30米分辨率实战:从坡度坡向到汇流避坑指南

重庆DEM 30米分辨率实战:从坡度坡向到汇流避坑指南 简介这份资源是面向GIS、遥感及地形分析学习者的重庆市30米分辨率数字高程模型数据包基于ASTER GDEM V3全球数据集自行拼接裁剪而成可直接用于城市规划、地质灾害评估、水文模拟、交通选线等场景适合具备一定GIS基础的中高级用户。压缩包共10个文件约125.77MB以GeoTIFF栅格数据为核心辅以Shapefile矢量边界含shp、shx、dbf、prj等配套文件、tfw坐标信息文件及xml元数据覆盖WGS84投影便于在ArcGIS、QGIS等软件中直接加载并开展坡度、坡向、汇流等分析。目前已有904人学习下载数据经过拼接与重投影处理省去原始分幅数据整合的繁琐步骤读者可快速获得覆盖重庆全市的连续DEM图层并结合行政边界矢量数据完成裁剪、地形复杂度计算与可视化制图为科研与工程决策提供可靠的地形底图。1. 重庆DEM30米分辨率山城地形数据到底怎么用起来第一次拿到重庆DEM30米分辨率的人十有八九会先愣一下打开一看全是灰不溜秋的栅格山在哪里、江在哪里、坡度在哪里全得自己算。重庆这地方又特殊主城夹在两江之间渝东北、渝东南全是深丘和山地海拔从一百多米一路爬到两千多米用平地的思路去处理这套数据翻车是迟早的事。这篇笔记讲的就是重庆DEM30米分辨率从哪来、怎么读、坡度坡向汇流怎么算、山城特有的坑在哪以及这套数据到底值不值得你投入时间去做。适合做GIS分析、选址评估、水文模拟、遥感入门的人新手能照着命令跑通熟手能对一下参数边界。2. 重庆DEM30米分辨率的数据来源与选型为什么不是随便下一份就行2.1 30米这个分辨率对重庆意味着什么先把概念钉死。DEM是数字高程模型每个栅格存一个海拔值。30米分辨率就是一个像素代表地面30米×30米的方块。放到重庆这个尺度刚好卡在一个尴尬又实用的位置比1弧秒约30米的SRTM、ASTER GDEM粗不到哪去又比12.5米的ALOS World 3D、5米的商业数据省存储、跑得快。重庆主城核心区南北不过十几公里30米一格意味着一条嘉陵江江面宽度大概就2到4个像素。这就带来第一个认知在重庆用30米DEM江面、陡崖、桥隧这些细节是被抹平的。你要是做城市级微地形、单体建筑选址30米不够但做区县级坡度分级、流域划分、大范围适宜性评价30米是性价比最高的档位。常见做法是优先选经过水文校正的DEM比如填洼处理过的版本而不是直接拿原始SRTM。原因后面避坑章会细说。2.2 数据获取几个能落地的渠道不编造具体下载链接只说渠道类型你自己按需找地理空间数据云、国家对地观测科学数据中心这类平台能拿到SRTM 1弧秒、ASTER GDEM V3覆盖重庆全境。测绘地理信息主管部门发布的公开版基础地理数据部分省份有1:5万DEM精度和现势性更好但申请流程长。商业或科研合作渠道的ALOS World 3D 30米全球覆盖山地表现比SRTM稳。选型判断就三条覆盖是否完整、是否做过填洼/去噪、坐标系是否明确。重庆跨了WGS84下的多个UTM带主城在48带渝东北部分落到49带直接混用会错位这是新手最容易忽略的点。2.3 拿到数据先做的三件事别急着算坡度。先做这三步能省掉后面一半的返工。# 1. 查看栅格基本信息尺寸、坐标系、NoData值 gdalinfo chongqing_dem_30m.tif # 2. 统一到投影坐标系重庆主城推荐UTM 48NEPSG:32648 gdalwarp -t_srs EPSG:32648 -r bilinear -of GTiff \ chongqing_dem_30m.tif chongqing_dem_utm48.tif # 3. 裁剪到研究区以某个区县边界为例 gdalwarp -cutline study_area.shp -crop_to_cutline \ chongqing_dem_utm48.tif chongqing_dem_clip.tif逻辑说明gdalinfo先确认NoData值很多SRTM的NoData是-32768不处理会在坡度计算时变成巨大异常值。gdalwarp重投影时重采样方法选bilinear高程数据不要用near否则会出现阶梯状伪影。裁剪用-crop_to_cutline而不是先裁后投影能减少边界插值误差。参数说明-t_srs是目标坐标系重庆做面积、坡度、汇流这类量算必须用投影坐标系地理坐标系经纬度算出来的坡度单位是度/度没有物理意义。-r重采样高程连续数据用双线性或三次卷积。3. 从DEM到坡度坡向汇流重庆山地必须调的参数3.1 坡度坡向计算算法选择和单位陷阱坡度是DEM最常用的派生量。GDAL和RichDEM、WhiteboxTools都能算但结果差异不小。核心在算法Horn算法3×3窗口平滑适合大范围Zevenbergen-Thorne适合地形起伏剧烈的区域。重庆这种山地我一般用Horn因为更稳不容易在陡崖处爆出极端值。import richdem as rd import numpy as np dem rd.LoadGDAL(chongqing_dem_clip.tif) # 计算坡度度 slope rd.TerrainAttribute(dem, attribslope_degrees) rd.SaveGDAL(chongqing_slope.tif, slope) # 计算坡向 aspect rd.TerrainAttribute(dem, attribaspect) rd.SaveGDAL(chongqing_aspect.tif, aspect) # 统计坡度分布看有没有异常 valid slope[slope -9999] print(坡度均值:, np.mean(valid)) print(坡度35度占比:, np.sum(valid 35) / valid.size)逻辑说明RichDEM的TerrainAttribute内部处理了边缘和NoData比手写卷积稳。算完一定要做分布统计重庆山地坡度25度的比例很高如果算出来均值只有几度八成是投影没换或者NoData没处理。参数说明slope_degrees输出度slope_percent输出百分比做工程边坡分级用度更直观。坡向输出是0-360度正北为0注意它和坡度一样对平坦区无意义平坦区坡向是噪声后续用坡度阈值掩掉。3.2 填洼与汇流累积山城水文分析的关键一步重庆的DEM里喀斯特洼地、水库、采石场会形成大量伪洼地。不填洼直接算汇流水流会断在坑里河网支离破碎。填洼用Wang Liu算法WhiteboxTools里叫FillDepressions。# 填洼 whitebox_tools -rFillDepressions \ --demchongqing_dem_clip.tif \ --outputchongqing_dem_filled.tif # 计算流向D8算法 whitebox_tools -rD8Pointer \ --demchongqing_dem_filled.tif \ --outputchongqing_flowdir.tif # 汇流累积 whitebox_tools -rD8FlowAccumulation \ --inputchongqing_flowdir.tif \ --outputchongqing_flowacc.tif \ --pntr --out_typecells逻辑说明填洼会改变原始高程所以填洼后的DEM只能用于水文分析不能拿去算坡度这是血泪经验。D8算法每个格子只往一个方向流简单快但在重庆这种复杂地形上会人为拉直河道做精细水文模拟建议换D-infinity或MFD。参数说明--out_typecells输出汇流累积的格子数换成catchment_area输出面积。提取河网时用阈值法重庆山区一般取汇流累积500到1000个格子作为河道起点具体值要按流域大小试。3.3 山影与地形起伏度给选址和景观分析用重庆做光伏选址、观景平台、通信基站地形起伏度和山影是硬指标。起伏度就是窗口内最大最小高程差窗口大小按需求定做宏观地貌用1km窗口做局地微地形用100到300米。import richdem as rd dem rd.LoadGDAL(chongqing_dem_clip.tif) # 地形起伏度窗口半径15格约450米 roughness rd.Roughness(dem, radius15) rd.SaveGDAL(chongqing_roughness.tif, roughness) # 山影hillshade方位角315高度角45 hs rd.Hillshade(dem, azimuth315, altitude45) rd.SaveGDAL(chongqing_hillshade.tif, hs)逻辑说明起伏度窗口半径直接决定结果粒度半径太小全是噪声太大就糊成一片。重庆主城用10到15格300到450米比较合适渝东南深山可以放大到30格。山影的方位角和高度角按出图需求调做地形可视化常用315/45做日照分析要按真实太阳位置算。参数说明radius单位是格数不是米换算时记得乘30。山影输出是0-255灰度可以直接叠加到地图上。4. 重庆DEM30米分辨率避坑五个真实踩过的坑4.1 坑一投影没换坡度算出来全是错的现象坡度图看着挺正常但统计均值只有2到3度明显偏低。 原因DEM还是WGS84地理坐标系栅格单位是度坡度算法按度/度算数值被严重压缩。 解决先gdalwarp到UTM投影重庆主城用EPSG:32648渝东北渝东南按经度选49带EPSG:32649。换完再算山地坡度均值一般能到15到25度。4.2 坑二NoData值没设边缘出现巨大异常现象坡度图边缘一圈黑或者白数值动辄几百度。 原因原始DEM的NoData是-32768算法把它当真实高程参与计算相邻格差几万米。 解决gdalinfo查NoData用gdalwarp -dstnodata或RichDEM的rd.SetNoData显式设置再算派生量。4.3 坑三填洼后的DEM拿去算坡度现象坡度图出现大片平坦区和实际地形对不上。 原因填洼把洼地填平了高程被改坡度自然失真。 解决填洼DEM只用于流向和汇流坡度坡向起伏度一律用原始或仅去噪DEM。两份数据分开管理文件名标清楚。4.4 坑四跨带拼接不处理接边处错位几百米现象把渝东北和主城的DEM拼一起接缝处地形对不上河流断开。 原因两块数据用了不同UTM带直接拼接坐标系不一致。 解决统一重投影到一个带或者用地理坐标系拼接后再整体投影。跨带大范围分析建议用Albers等积投影重庆可用CGCS2000 Albers。4.5 坑五汇流阈值拍脑袋河网要么太密要么断流现象提取的河网密密麻麻像毛细血管或者主河道都断成几截。 原因汇流累积阈值没按流域面积调重庆山区小流域多统一阈值不适用。 解决按研究区最小关心流域面积反推阈值。比如关心1平方公里以上的沟道阈值约等于1000000/(30×30)≈1111个格子。分区域试主城和深山用不同阈值。5. 进阶用重庆DEM做一套可复用的地形因子流水线单次分析做完就完了但实际项目里DEM派生量要反复用。我一般搭一条流水线把重投影、去噪、坡度、坡向、起伏度、汇流一次性跑完输出统一命名、统一坐标系、统一NoData的成果包。这样下次换研究区改个边界和投影参数就能复用。import subprocess import os def build_terrain_pipeline(dem_path, out_dir, epsg32648, rough_radius15): os.makedirs(out_dir, exist_okTrue) base os.path.join(out_dir, dem_utm.tif) # 重投影 subprocess.run([gdalwarp, -t_srs, fEPSG:{epsg}, -r, bilinear, -dstnodata, -9999, dem_path, base], checkTrue) # 坡度、坡向、起伏度 import richdem as rd dem rd.LoadGDAL(base) rd.SaveGDAL(os.path.join(out_dir, slope.tif), rd.TerrainAttribute(dem, attribslope_degrees)) rd.SaveGDAL(os.path.join(out_dir, aspect.tif), rd.TerrainAttribute(dem, attribaspect)) rd.SaveGDAL(os.path.join(out_dir, roughness.tif), rd.Roughness(dem, radiusrough_radius)) # 填洼流向汇流 filled os.path.join(out_dir, dem_filled.tif) subprocess.run([whitebox_tools, -rFillDepressions, f--dem{base}, f--output{filled}], checkTrue) flowdir os.path.join(out_dir, flowdir.tif) subprocess.run([whitebox_tools, -rD8Pointer, f--dem{filled}, f--output{flowdir}], checkTrue) subprocess.run([whitebox_tools, -rD8FlowAccumulation, f--input{flowdir}, f--output{os.path.join(out_dir, flowacc.tif)}, --pntr, --out_typecells], checkTrue) print(流水线完成成果在:, out_dir) build_terrain_pipeline(chongqing_dem_30m.tif, ./cq_terrain_out)逻辑说明把重投影放第一步后面所有派生量都在统一投影下算避免跨带问题。填洼单独走一条支线不和坡度混用同一份DEM。函数化之后换区县只改输入路径和EPSG。参数说明epsg按研究区经度选重庆主城32648渝东北渝东南32649。rough_radius按分析尺度调宏观用30局地用10。输出统一NoData为-9999方便后续批量处理。验证方法跑完后抽查三个点——一个已知山顶、一个江面、一个陡崖用gdallocationinfo读高程和坡度和实地或高精度数据对比。误差在合理范围30米DEM高程误差通常几米到十几米就说明流程没问题。我自己做重庆项目这些年最大的习惯就是先看坐标系和NoData再动手算任何东西。这两样不对后面全是白干。重庆DEM30米分辨率不算精细数据但把投影、填洼、阈值这几个参数调对它能撑起区县级大部分地形分析需求投入产出比很高。希望帮到你。本文还有配套的精品资源点击获取
返回列表