简介:青海省30米分辨率DEM数据,基于ASTER GDEM V3生成,面向GIS从业者、地理科研人员及环境规划相关学习者,可用于地形特征提取、坡度坡向分析、流域与地质灾害研究等场景。压缩包共10个文件,核心为GeoTIFF格式的DEM栅格,配套坐标参考、元数据及属性表文件;另含青海省边界矢量数据(Shapefile),涵盖shp、dbf、shx、sbn、sbx、prj等类型,便于划定研究区并进行叠加分析。资源包约944.59MB,精度适合省级尺度的地形研究,WGS84坐标系可兼容ArcGIS、QGIS、GlobalMapper等主流软件。已有494人学习下载。使用者可结合遥感影像分析地形对植被、水文的影响,也可服务于城市规划、灾害风险评估与交通路线规划等实际项目,为青藏高原环境变化研究提供基础数据支撑。
1. 青海省30米DEM:高原工程的第一张地形底图
在青海做光伏选址、输电线路路径规划或者矿山复垦方案,第一个要喂给建模软件的不是卫星图,而是DEM。这份30米分辨率的青海省数字高程模型,覆盖全省约72万平方公里的连续高程信息,从祁连山北麓到唐古拉山口都有完整的栅格表达。它解决的问题非常直接:哪片坡地超过20度不适合布置场坪、哪段河谷的填挖方量会超出概算、哪条山脊线两侧的高差会影响线路弧垂设计。适合做省级规划、厂址初筛、水文分析预判这一类前期工作。如果你要出施工图级别的精细设计,单靠它还撑不住,需要再叠加密测量数据,但它一定是你在青海落项目的第一张底图。
2. DEM数据源与选型:SRTM、ASTER、ALOS在青海怎么选
2.1 三种公开30米数据源在青海高原的差异
青海省的地形特征决定了没有哪一款DEM是绝对安全的。省内既有祁连山的深切割地形,又有柴达木盆地的大面积平坦盐碱地,还有长江源头的冰碛湖群和冻胀丘,不同数据源的获取方式在这些地物上的表现差异很大。
SRTM是2000年航天飞机雷达干涉测量的产物,C波段雷达信号在柴达木盆地这样的平坦干沙区干涉质量稳定,在祁连山区的峡谷里却容易产生雷达阴影和叠掩,表现为山体陡坡上的条带状异常值。ASTER GDEM是光学立体像对匹配生成的,在青海湖周边雪线以上、裸岩区、盐湖反光区会出现成片的匹配失败,典型症状是地形表面有成片的凹陷坑和尖锥凸起,局部高差能差到三五十米。ALOS AW3D30是日本JAXA发布的L波段SAR数据,波长更长,对冰雪和干沙的穿透性更好,在高原地区的空洞率明显低于前两者,但公开版本在部分区域的平坦地形上会看到轻微的水印状痕迹。
我拿到一份青海省DEM时,第一件事就是看它的来源字段。GDAL命令行里一条指令就能查:
gdalinfo -proj4 qinghai_dem.tif注意看Metadata里是否有SRTMGL3、ASTGTMV3、AW3D30这样的标识。如果没有来源信息,用剖面工具在已知高程点上拉两条线:一条穿祁连山陡坡,一条穿柴达木盆地,对比ASTER和SRTM在陡坡处的数值跳动幅度。实际操作中,ALOS在青海的山区表现最稳定,SRTM在盆地和平原区最干净,ASTER只在局部小范围内可用。如果条件允许,推荐用ALOS或SRTM作为基础,用ASTER只做局部插补。
2.2 坐标系与投影:跨带项目怎么定参数
青海省东西跨度约13.5度经度,从东经89度35分到103度04分。按高斯-克吕格3度带划分,西端属于第30带(中央经线90°E),东端湟水谷地属于第34带(中央经线102°E)。如果项目区正好跨越中央经线,比如在格尔木到都兰一带做输变电线路,直接用其中某一带投影会导致远离中央经线的一侧边长变形迅速累积。
省级尺度的分析,我一般用Albers等积圆锥投影,双标准纬线设在36°N和38°N,中央经线设在96°E。这样全省范围内面积量算不会出现系统偏差。如果项目区是单县域或单流域,则用所在区域的3度带高斯投影,保证局部形变精度。
原始DEM数据通常是WGS84经纬度坐标,计算坡度坡向或面积之前必须先重投影到米制坐标系。这里有一个经常被忽略的细节:30米分辨率在赤道附近对应约0.00027度,但青海处于北纬31度到39度之间,同样0.00027度的经度间隔在39度纬度上的地面距离只有约23米。如果直接用经纬度栅格计算坡度又不做比例修正,得到的坡度值普遍偏小。要统一到30米×30米的真实地面网格,必须用重投影和重采样解决。
2.3 拿到数据先做三项检查
第一项检查是边界完整性。用gdalinfo查看栅格的四至范围,与青海省的省界矢量叠加,确认没有缺角或者大范围空洞区。三十米分辨率的全省数据覆盖面积大,经常出现某块分幅瓦片缺失的情况。
第二项检查是空值分布。用QGIS打开数据,用无数据值渲染,找出空洞集中的区域。青海的冰川覆盖区、盐湖周边、高山峡谷带往往是空洞高发区。统计空洞面积占全省的比例,如果超过5%,后续需要做填充或重新找源。
第三项是剖面验证。选择几个高程已知的检查点,比如西宁市区约2260米、格尔木市区约2780米、青海湖面约3196米,在QGIS里用Profile Tool拉剖面,看DEM读出的数值与实际高程是否吻合。这一步能快速判断数据的高程基准是不是标准产品,也能发现是否存在整体偏移。
做完这三项检查,数据能不能投入生产,心里就有了底,再进入预处理流程。
3. 预处理实操:拼接、裁剪、空洞填补与重采样
3.1 用GDAL批量拼接并按边界裁剪
青海省DEM如果是从分幅下载源获取的,每个文件是一度或半度的一个小格子。推荐用GDAL的VRT机制先拼接,不实际合并文件,让磁盘压力和内存占用降下来。VRT是一个虚栅格文件,记录各分幅的路径和位置关系,后续任何处理都可以直接把它当作单一文件对待。
# 把青海省目录下所有tif分幅,按文件名字符串排列,构建一个VRT gdalbuildvrt qinghai_raw.vrt ./青海省分幅/*.tif # 按省界矢量裁剪,同时完成到CGCS2000投影坐标系的转换 gdalwarp -cutline qinghai_boundary.shp -crop_to_cutline \ -t_srs "EPSG:XXXX" -tr 30 30 -r bilinear \ qinghai_raw.vrt qinghai_dem_proj.tif构建VRT这一步,如果各分幅的分辨率、坐标系不统一,gdalbuildvrt会报错或拼出畸形网格。最常见的分幅下载数据都是WGS84经纬度坐标,分辨率也一致,这一步通常不会出问题。如果某几个分幅是从不同渠道拿的,先单独用gdalinfo核对,不要把坐标系混乱的分幅混进同一批。
gdalwarp的参数里,-cutline指定省界矢量,-crop_to_cutline是让输出栅格范围严格贴合边界,边界外的像元不输出。-t_srs后面的EPSG:XXXX需要替换成目标投影代码,比如项目区所在的3度带高斯投影代码,或者省级Albers投影代码。-tr 30 30表示输出分辨率是30米×30米,-r bilinear表示重采样方法用双线性内插,适合地形数据。如果对地形细节有更高要求,可以用cubic三次卷积,但计算量会大不少,且在空洞区域容易产生过冲波纹。
3.2 高原空洞区的填补策略
青海的空洞区域有明显聚集性:冰川作用区的陡峭岩壁、盐湖湖面、宽河谷的河漫滩。这些区域在SRTM和ASTER中经常是NoData。直接留空会影响后续坡度计算和水文分析,因为填洼算法会把空洞当作绝对深坑。
用GDAL自带的FillNodata算法处理是最快的方式:
from osgeo import gdal src_ds = gdal.Open("qinghai_dem_proj.tif", gdal.GA_Update) band = src_ds.GetRasterBand(1) # 先确保NoData值被正确识别,SRTM的NoData通常是-32768 band.SetNoDataValue(-32768) # maxSearchDist=200,搜索半径200个像素,也就是6公里;smoothingIterations=0,不做额外平滑 gdal.FillNodata(band, None, maxSearchDist=200, smoothingIterations=0) # 关闭文件使写入生效 src_ds = None print("空洞填补完成")maxSearchDist的取值直接决定填补质量。设小了,大面积的空洞中间部分填不进去;设大了,填补结果趋向于一个局部均值,地形细节被抹平。200个像素对于30米数据来说是一个折中值,既覆盖了省内绝大多数空洞尺度,又不至于把雅丹地貌的纹理都抹掉。smoothingIterations参数我保持为0,因为填补算法本身已经做了一次插值,再加平滑会拖垮边缘的锐度。
填补完之后必须复查:让QGIS把填补区域的边界渲染出来,确认填补值没有在湖盆、冰川槽谷里留下突兀的平台或尖锥。如果发现高原面上的填补结果呈现锅盖状,说明搜索半径偏大,改小一半再跑一次。
3.3 重投影与分辨率重采样:参数选择依据
预处理流程中,重投影和重采样可能前后各出现一次。第一次是把经纬度坐标的原始数据转成米制投影,供坡度、坡向计算使用;第二次是在数据拼接完成后,按项目要求把分辨率调整到目标值,比如省级分析统一到50米,县级工程加密到10米内插。
# 从30米降到50米分辨率,用于省级景观格局分析 gdal_translate -outsize 50 50 \ -r average \ qinghai_dem_proj.tif qinghai_dem_50m.tif注意这里用的是average重采样而不是bilinear。降分辨率时用平均值聚合像元,能最大限度保留地形体积的真实性;如果用bilinear,会把山脊和沟谷的极值拉低,导致后续坡度分析失真。反过来,如果因为项目需要从30米加密到15米,用cubic三次卷积插值,不要用bilinear,后者在加密时会产生阶梯状伪影。
重采样之后观察直方图。正常地形的DEM直方图应该接近单峰右偏分布,峰值在高原平均海拔附近。如果重采样后直方图出现明显的双峰,说明插值方法把大片低洼区顶起来了,需要检查原始数据中是否存在系统性异常斑块。
4. 地形分析实战:坡度、坡向、山体阴影与等高线参数
4.1 坡度与坡向提取:GDAL自带模块的参数细节
坡度坡向计算是整个DEM应用里用得最多的环节。GDAL提供了专门的DEM工具集,一条命令就能出结果。关键是要选对算法和处理参数。
# 在投影坐标系(米制)下计算坡度,输出单位为度 gdaldem slope qinghai_dem_proj.tif qinghai_slope.tif # 计算坡向,输出为0-360度,正北为0,顺时针 gdaldem aspect qinghai_dem_proj.tif qinghai_aspect.tifgdaldem slope默认使用Horn算法,该算法在3×3窗口内对中心像元的八个邻域做加权差分。Horn算法对噪声相对保守,适合祁连山地这种地形起伏大、且原始数据有残余噪声的场景。如果你的数据来源是平滑的水准测量成果,可以改用-ZevenbergenThorne算法,它对表面细节更敏感,但对单个像元的异常值几乎没有抵抗力。
在青海的应用场景中,坡度的分级阈值通常和工程规范挂钩:光伏场地要求坡度通常小于15度到20度,输电线路塔位要求小于30度,泥石流沟道识别则关注大于35度的陡坡段。导出坡度栅格后,用gdalwarp做一个条件分类,按阈值把可建设区域直接矢量化导出。
# 提取坡度小于15度的区域 gdal_calc.py -A qinghai_slope.tif --outfile=slope_lt15.tif \ --calc="A<15" --NoDataValue=0gdal_calc.py是GDAL自带的栅格计算器,A代表输入的坡度栅格,计算结果中True自动变为1,False变为0。后面接的NoDataValue=0把所有不可建区置为NoData,方便后续转为矢量。
4.2 山体阴影制图:太阳方位角和高度的设定逻辑
山体阴影是DEM最直观的展示形式,也是纸质图件最常用的地形基底。GDAL的hillshade模块参数设定直接影响图面可读性。
gdaldem hillshade qinghai_dem_proj.tif qinghai_hillshade.tif \ -z 3.0 -az 315 -alt 45-z 3.0是垂直放大系数。青海高原面大体平坦,绝大多数区域坡度不超过5度,直接生成的阴影整体偏灰、层次弱,放大三倍后地形脉络才清晰。-az 315表示光源方位角315度,即从西北方向打光,阴影投向东南。这个方向在制图规范中最符合人眼的读图习惯。-alt 45是太阳高度角,45度在高原地区既不会让阴影过浓也不会让地形过于扁平。
山体阴影文件通常还需要与真实色彩或高程分层设色合成使用。做法是用QGIS的栅格混合模式,把阴影栅格作为Multiply图层垫底,DEM的颜色渲染作为Normal图层叠在上面,透明度调整到70%到80%。这种阴影浮雕效果在一张图里既能表达绝对高程,又能表达地形的起伏纹理。
4.3 等高线生成与抽稀:制图比例尺的匹配逻辑
从DEM提取等高线有两种工具,一条命令解决:
# 生成间距100米的等高线,高程值写入属性elev gdal_contour -a elev -i 100 qinghai_dem_proj.tif qinghai_contour_100m.shp-i 100的等高线间距选择,跟目标图件的比例尺直接相关。省级挂图用200米间距,州县级工作底图用100米,县级工程设计用10米到20米。间距越小,生成的Shapefile文件越大,线条越密。青海省地形高差大,如果强行在工程图里用5米间距提取等高线,峡谷地段会出现线线粘连,图面一塌糊涂。
等高线提取后通常会做一次抽稀和平滑,因为DEM栅格是离散的,直接提线在陡坡处会呈现锯齿。用QGIS的Simplify工具,容差设为30米,算法选Douglas-Peucker,保留山脊线的基本骨架。注意抽稀时不要把闭合等高线在鞍部截断,否则后期填色会产生错误。
5. 避坑指南:青海DEM处理中的五个真实翻车现场
5.1 湖面高程大面积异常
现象:在青海湖、扎陵湖、鄂陵湖的湖面范围内,DEM高程值不是平滑的平面,而是呈现密集的随机凹凸,局部高差达20米以上,湖岸线处甚至出现夸张的断层。
原因:雷达和光学数据在水体区域都会失效。水面几乎没有雷达回波,立体像对匹配也会因为纹理缺失而失败,数据生产方用内插补出的湖面高程自然不可信。
解决:用已有的湖泊水面边界矢量,把湖面范围单独提取出来,直接赋统一高程值。青海湖实测湖面高程约为3196米,具体取值以最新水利普查或实测数据为准。先用gdal_rasterize把湖泊矢量栅格化,再用gdal_calc.py把该范围的高程替换成常量,输出新的DEM文件作为工作版本。
5.2 深切峡谷区的条带状噪声
现象:玉树、果洛一带的深切峡谷坡面上,DEM高程呈条带状起伏,条带方向与山体走向一致,每条带宽约100到300米,像搓衣板纹理。
原因:这是雷达阴影效应的典型表现。SRTM的C波段在陡峭峡谷里接收不到有效回波,数据生产方用周边像元插补时留下了方向性痕迹。ASTER在同样位置的立体匹配也经常失败,表现为横向撕裂。
解决:先用坡度数据把噪声区识别出来,坡度大于40度的区域作掩膜,然后用中值滤波窗口(5×5或7×7)只对掩膜区域做平滑。这样能压制条带,又不会破坏缓坡地的真实地形。如果平滑后依然明显,换ALOS AW3D30重新提取该区域数据,做局部镶嵌。
5.3 与GPS实测高程偏差达到20米以上
现象:拿着RTK实测的工程控制点高程,与DEM读取的高程对比,发现系统性偏低或偏高15到25米,且误差方向一致。
原因:高程基准不一致。DEM产品通常采用EGM96或EGM2008大地水准面模型,高程值是基于大地水准面的正高;而国内工程测量使用1985国家高程基准,两者在青藏高原地区的差异可以达到几十米。另有部分商业DEM使用WGS84椭球高,那是把地形表达成相对椭球面的距离,与正常高之间隔着一个大地水准面差距。
解决:首先查数据的官方元数据,确认高程基准类型。如果是EGM96,则需要用高精度似大地水准面模型(如省级似大地水准面精化成果)做格网改正,把正高转为1985正常高。快速修正办法是在项目区均匀采集5到10个已知高程点,计算平均差AfterDEM和实测差,再用gdal_calc对整个DEM做常数平移。这个办法适用于局部工程,但不适合全省统一成果。
5.4 分幅接边处出现错位跳变
现象:拼接后的DEM图面上,沿着原分幅边界有一条清晰的高程台阶,山脊线在边界两侧错开20到50米,但每幅内部看起来都正常。
原因:相邻分幅来自不同版本的数据源,或同一版本但不同期处理,几何配准和垂直基准有细微差异。尤其常见于跨省边界,青海和西藏、新疆的交界分幅来自不同数据中心。
解决:如果所有分幅是同一个源同一版本,先检查各分幅的仿射变换参数是否完全一致,不一致的用gdal_translate修正到统一网格。不同版本混拼的,最简单方案是不拼接、各幅单独处理后再用加权融合。GDAL有个VRT的edge羽化功能,可以在VRT构建时加blend-dist参数,让接边在数百米范围内渐晕过渡,视觉效果会好很多,但严格定量分析仍然不推荐。
5.5 重采样后地形细节消失
现象:把30米DEM重采样到90米后,原本清晰的山脊线变钝,小型冲沟消失,计算出的流域面积和实际对不上。
原因:重采样方法选错。降分辨率时用bilinear,相当于对局部地形做了平均,山脊和沟谷这些高频信息被当成噪声滤掉了。直接后果就是水文分析结果偏差大,源头的细小河道会被合并甚至消失。
解决:降分辨率用average聚合,它先把30米像元划分成3×3块,再对每个块求均值,能保留总量不丢。如果特别在意地形骨架,更好的做法是用一个名为terrain position index的中间层先提取地形特征,再对特征层做聚合重采样。从那以后我每次做重采样都会在输出文件命名里强加一个后缀标明采样方式,避免半年后自己都不记得当时用了什么参数。
6. 进阶玩法:从DEM到水文分析与三维场景
6.1 河网提取:填洼阈值怎么定才不翻车
水文分析是DEM应用里最容易出玄学问题的模块。标准流程是填洼、算流向、算汇流累积、按阈值提取河网。填洼这一步的阈值选择,直接决定提取出的河网密度和形态。
# 使用WhiteboxTools填洼,修复所有凹陷 whitebox_tools --run=FillsDepressions -i=dem_proj.tif -o=dem_filled.tif # 计算D8流向 whitebox_tools --run=D8Pointer -i=dem_filled.tif -o=d8.tif # 计算汇流累积量 whitebox_tools --run=D8FlowAccumulation -i=d8.tif -o=acc.tif在青海的高原面上,天然浅洼地特别多,比如长江源区的草甸冻胀坑、湖盆边缘的浅水塘。完全填洼会把所有洼地都填平,后续提取的河网会变成沈阳棋盘格一样的平行线。对于这类区域,我不改默认填洼,而是在汇流累积量这一步把河网提取阈值调大,一般用积累量大于5000像元才定义为河道,对应约450万平方米的汇水面积。如果提取结果过于稀疏,逐步降低阈值到3000,每次跑完对比一下与真实河流叠加的吻合度,不追求一刀切。
6.2 三维场景快速构建:QGIS加Qgis2threejs
地形汇报场景里,一张山体阴影叠加彩色高程的静态图往往不够直观。用QGIS的Qgis2threejs插件,可以把DEM直接导出成一个HTML三维场景,任何人用浏览器就能打开旋转查看,不需要安装专业GIS软件。
操作流程:QGIS里加载填洼后的DEM,设置好高程渲染色带,叠加山体阴影图层。打开Qgis2threejs面板,将DEM拖入作为高程层,设定垂直拉伸系数。青海的地形平坦区域垂直拉伸系数建议4到5,五千米级的高山区用2到3,否则峡谷会显得过于狰狞或者高原面显得一片平坦。地形纹理选择叠加山体阴影的合成图层,导出HTML后即可交付。
这个流程不生成磁盘上成百GB的三维模型,却能在方案评审现场直接拉视角看线路走廊和场平范围,比对着等高线图解释高效得多。我把这套流程整理成了一个固定模板,每次新增项目区,换DEM、换边界,十分钟出场景,拿来汇报和复核都够用。希望这些处理习惯能帮到你。
本文还有配套的精品资源,点击获取