简介:本资源为甘肃省兰州市30米分辨率数字高程模型(DEM)地理信息数据集,面向GIS初学者、城市规划与环境分析从业者及遥感教学实践者,解决地形建模、空间分析与区域可视化等基础应用需求。压缩包共12个文件,包含核心高程数据(兰州市DEM.tif)、矢量边界文件(兰州市范围.shp及其.dbf/.prj/.shx/.sbn/.sbx辅助文件)、TIFF元数据与地理配准文件(.tfw/.ovr/.xml等),完整覆盖GIS数据标准结构,支持ArcGIS、QGIS等平台直接加载与三维地形渲染。资源大小54.68MB,格式规范、坐标系明确,开箱即用。已有1361人学习下载,用户可直接开展坡度坡向分析、流域提取、视域分析或制作兰州市地形晕渲图,配套的SHP范围文件更便于开展空间裁剪与区域统计,是开展西北地区中小尺度地形研究与教学实践的可靠基础数据。
1. 兰州市30米分辨率DEM数据包不是“拿来即用”的地形图,而是GIS分析的原始燃料
你下载了名为“甘肃省兰州市DEM数字高程数据30m(含区域范围shp文件).zip”的压缩包,解压后看到一个.tif文件和一个.shp文件——这并非一张可直接打印的等高线地图,而是一组空间基准明确、坐标系可验证、像元值代表海拔(单位:米)的栅格数据集。它真正价值在于支撑坡度分析、汇水区提取、视线通视模拟、三维地形建模等GIS空间运算,而非仅作可视化底图。该数据适用于城市规划中的土方量估算、地质灾害风险初筛、无人机航线高程避障预处理,也常被用于遥感影像正射校正的地面控制点高程参考。使用者需具备基础GIS操作能力:能识别WGS84与CGCS2000坐标系差异、理解GeoTIFF元数据中Pixel Size与Upper Left含义、区分.shp中多边形边界与DEM实际覆盖范围是否一致。新手易误将shp文件当作“裁剪掩膜”直接套用,却忽略其投影与DEM不匹配导致裁剪错位;老手则更关注30米分辨率在兰州南北两山沟壑区的地形表达精度——对坡度大于25°的陡坡段,单个像元可能跨越数米高差,需结合更高精度数据做局部插值。
2. 验证与加载:用GDAL和QGIS确认数据坐标系、范围与高程单位
2.1 用gdalinfo命令解析DEM元数据,锁定关键参数
在终端执行以下命令(Windows用户请先安装OSGeo4W或QGIS自带的OSGeo4W Shell):
gdalinfo "Lanzhou_DEM_30m.tif"输出中需重点核验三项:
Coordinate System字段:应为GEOGCS["CGCS2000",DATUM["China_2000"...]或PROJCS["CGCS2000_3_Degree_GK_Zone_36"。若显示WGS 84,说明未使用国家2000大地坐标系,后续叠加兰州市行政区划数据时将产生数百米级偏移;Origin与Pixel Size:典型值为Origin = (102.875000000000000,36.750000000000000)与Pixel Size = (0.000277777777778,-0.000277777777778),对应30米空间分辨率(因1度≈111km,30m/111000≈0.00027度);Band 1下的NoData Value:常见为-9999或0,此值在坡度计算中必须设为无效值,否则会污染统计结果。
提示:若
Coordinate System为空或显示Unknown,需用gdalwarp强制指定坐标系,例如:gdalwarp -s_srs EPSG:4490 -t_srs EPSG:4490 -r near Lanzhou_DEM_30m.tif fixed_DEM.tif
(EPSG:4490为CGCS2000地理坐标系代码)
2.2 在QGIS中同步加载DEM与shp文件,验证空间一致性
- 启动QGIS 3.28+,拖入
Lanzhou_DEM_30m.tif,系统自动识别为栅格图层; - 拖入
Lanzhou_boundary.shp,右键图层→“属性”→“源”选项卡,检查其CRS是否与DEM一致(均为EPSG:4490); - 若shp图层显示为细长条状或完全偏离兰州位置,说明其坐标系被错误定义——此时需右键shp图层→“设置图层CRS”→选择
EPSG:4490(非“启用‘on the fly’变换”); - 使用“测量工具”量取shp多边形西北角到东南角的直线距离,应接近150km(兰州东西跨度),若仅为15km,证明shp坐标单位被误读为米而非度。
2.2.1 关键验证:DEM像元值是否真实反映海拔
在QGIS中启用“信息工具”(鼠标悬停),点击兰州市中心(如白塔山附近),读取像元值。真实高程应在1500–1600米之间;若出现-9999或0,说明该位置属于NoData区域,需检查shp边界是否完全覆盖有效DEM区域。此时可用Raster → Extraction → Clip Raster by Mask Layer,以shp为掩膜裁剪DEM,勾选CROP_TO_CUTLINE并设置NODATA为-9999,生成严格限定在兰州市行政范围内的新DEM。
| 参数项 | 正确值示例 | 错误表现 | 后果 |
|---|---|---|---|
| 坐标系 | EPSG:4490 (CGCS2000) | EPSG:4326 (WGS84) | 叠加POI点位偏移300–500米 |
| 分辨率 | 0.000277778度(≈30m) | 0.000027778度(≈3m) | 文件体积异常大,实为重采样伪影 |
| NoData值 | -9999 | 0 | 坡度计算中将黄河水面(高程≈1520m)误判为无效区 |
3. 裁剪与重采样:用GDAL命令行精准提取兰州城区DEM子集
3.1 用shp文件裁剪出兰州市主城区范围(非全境)
Lanzhou_boundary.shp通常包含整个兰州市辖区(含永登、榆中等远郊县),但多数分析只需城关、七里河、安宁、西固四区。需先提取这四区多边形:
# 1. 查看shp属性表,确认行政区划字段名(常见为'NAME'或'ADM_NAME') ogrinfo -so Lanzhou_boundary.shp Lanzhou_boundary # 2. 提取四区边界(假设字段名为'NAME',且值为'城关区','七里河区','安宁区','西固区') ogr2ogr -where "NAME IN ('城关区','七里河区','安宁区','西固区')" \ Lanzhou_urban.shp Lanzhou_boundary.shp # 3. 用此shp裁剪DEM(-crop_to_cutline确保像素对齐,-dstnodata保留原NoData值) gdalwarp -cutline Lanzhou_urban.shp -crop_to_cutline \ -dstnodata -9999 -r bilinear \ Lanzhou_DEM_30m.tif Lanzhou_urban_DEM.tif注意:
-r bilinear指定双线性重采样,避免裁剪后边缘出现阶梯状伪影;若需保持原始像元值不变,改用-r near(最近邻),但可能导致边界锯齿。
3.2 将30米DEM重采样为10米分辨率(仅当必要时)
30米分辨率在兰州城区建筑密集区存在细节损失(如深沟、堤坝轮廓模糊),但盲目重采样会制造虚假精度。仅当进行无人机航迹规划或微地形分析时才需下采样:
# 使用三次卷积法重采样(比双线性更平滑,适合高程连续变化区) gdalwarp -tr 0.000092592592593 0.000092592592593 \ -r cubicspline \ Lanzhou_urban_DEM.tif Lanzhou_urban_DEM_10m.tif参数说明:
-tr 0.000092592592593:10米对应经纬度约0.0000926度(10/111000),需精确计算;-r cubicspline:三次卷积法对高程数据插值更合理,避免双线性在陡坡处过度平滑;- 禁止使用
-r lanczos:该方法在高程数据中易产生振铃效应,导致虚假凹坑或凸起。
3.2.1 验证裁剪后文件有效性
执行gdalinfo Lanzhou_urban_DEM.tif,对比原始文件:
Size字段:宽度与高度应显著减小(如从12000×8000变为3200×2100);Corner Coordinates:四角经纬度应落在东经103.4–103.9、北纬35.9–36.2范围内;STATISTICS_MINIMUM/STATISTICS_MAXIMUM:最小值应≥1480(兰州最低点近黄河水面),最大值≤2200(皋兰山顶),若出现-9999占比超5%,说明裁剪掩膜未完全覆盖有效区域。
4. 坡度与坡向计算:用GRASS GIS模块生成兰州地形特征图层
4.1 在QGIS中调用r.slope.aspect模块(GRASS 7.8+)
QGIS内置GRASS工具链,比SAGA或ArcGIS Spatial Analyst更适配开源DEM处理:
- 确保已启用GRASS插件(菜单栏:Plugins → Manage and Install Plugins → 搜索"GRASS"并启用);
- 加载
Lanzhou_urban_DEM.tif,进入Processing Toolbox → GRASS → Raster → r.slope.aspect; - 关键参数设置:
Elevation map: 选择Lanzhou_urban_DEM@PERMANENTSlope output: 命名为lanzhou_slopeAspect output: 命名为lanzhou_aspectFormat:Floating point(坡度需小数精度)Min slope for flat areas:0.1(避免将缓坡误判为0°)
提示:GRASS默认输出坡度单位为度(0–90°),而非百分比。若需百分比坡度,后续用Raster Calculator计算:
("lanzhou_slope@1" * 0.0174533) * 100(弧度转百分比)。
4.2 提取兰州关键地形约束区(实战应用)
基于坡度图识别工程限制区域:
# 1. 生成坡度>25°的陡坡区(地质灾害高风险带) gdal_calc.py -A Lanzhou_urban_DEM.tif --calc="A>25" --outfile=steep_mask.tif --NoDataValue=0 # 2. 生成坡向朝南(135–225°)的阳坡区(太阳能板布设优选区) gdal_calc.py -A lanzhou_aspect.tif --calc="((A>=135)*(A<=225))" --outfile=south_facing.tif # 3. 合并生成“可建设区”(坡度≤15°且非阳坡) gdal_calc.py -A lanzhou_slope.tif -B south_facing.tif \ --calc="((A<=15)*(1-B))" --outfile=buildable_zone.tif4.2.1 兰州特殊地形校验点
在buildable_zone.tif上验证三个典型位置:
- 雁滩片区(东经103.85,北纬36.05):应显示为可建设区(黄河阶地,坡度<5°);
- 五泉山南麓(东经103.83,北纬36.04):应为陡坡区(坡度>30°,属黄土梁峁);
- 西固石化厂区(东经103.62,北纬36.08):应为可建设区(工业平台人工整平)。
若五泉山区域未被识别为陡坡,说明原始DEM在该处存在数据空洞,需用gdal_fillnodata.py填充:
gdal_fillnodata.py -md 100 -si 0 Lanzhou_urban_DEM.tif filled_DEM.tif(-md 100表示最大插值距离100像元,-si 0禁用平滑,保持原始地形突变特征)
5. 三维可视化与导出:用Blender GIS插件构建兰州真实地形场景
5.1 将DEM导入Blender生成可交互地形模型
Blender GIS插件(v3.0+)支持直接加载GeoTIFF并生成网格,规避QGIS DTM Tiler的瓦片拼接缺陷:
- 安装Blender GIS插件(Preferences → Add-ons → Install → 选择blendergis.zip);
- 新建项目,删除默认立方体,进入
Add → Mesh → GIS → Import DEM; - 关键设置:
File Path: 选择Lanzhou_urban_DEM.tifScale Z: 设为1.0(保持真实高程比例,避免地形被压扁)Subdivision:2(平衡面数与细节,兰州城区30米DEM约需20万面)Material: 勾选Create material with elevation texture,自动生成高程色带
注意:Blender默认单位为米,而DEM像元尺寸为30米,因此无需额外缩放。若模型显示过小,检查DEM元数据中
Pixel Size是否被误读为0.03度(对应3.3km),此时需在Blender中手动将Z轴缩放至100倍。
5.2 添加真实纹理与导出WebGL格式
为地形赋予兰州真实地表特征:
# 在Blender Python控制台执行(需提前下载兰州Sentinel-2真彩色影像) import bpy from blendergis import utils # 加载影像作为纹理 img = bpy.data.images.load("/path/to/Lanzhou_RGB.tif") # 创建材质并绑定纹理 mat = bpy.data.materials.new(name="Lanzhou_Texture") mat.use_nodes = True bsdf = mat.node_tree.nodes["Principled BSDF"] tex_image = mat.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = img mat.node_tree.links.new(tex_image.outputs['Color'], bsdf.inputs['Base Color']) # 应用到地形网格 bpy.context.object.data.materials.append(mat)导出为WebGL兼容格式(供网页嵌入):
- 选择地形网格 →
File → Export → glTF 2.0 (.glb); - 勾选
Export UVs、Export Materials、Apply Modifiers; - 设置
Image Format为Embedded,确保纹理打包进.glb文件; - 导出后用 https://gltf-viewer.donmccurdy.com 在线验证——兰州黄河呈明显蓝色带,南北两山呈现连续褐色起伏。
5.2.1 性能优化技巧:针对兰州地形的LOD分级
兰州城区高程变化剧烈(黄河谷地1520m vs 皋兰山2100m),直接导出全精度模型会导致Web端卡顿。采用分层细节(LOD)策略:
| LOD层级 | 覆盖区域 | 分辨率 | 面数 | 适用场景 |
|---|---|---|---|---|
| LOD0 | 全域(四区) | 30m | 12万 | Web全景浏览 |
| LOD1 | 城关核心区(白塔山-中山桥) | 10m | 85万 | VR漫游 |
| LOD2 | 黄河滨水带(500m缓冲区) | 5m | 320万 | 工程BIM集成 |
生成LOD1模型时,在r.slope.aspect前先用gdal_translate裁剪核心区:
gdal_translate -projwin 103.82 36.07 103.87 36.03 \ Lanzhou_urban_DEM.tif Lanzhou_core_DEM.tif(坐标范围对应中山桥至白塔山,约5km×4km)
本文还有配套的精品资源,点击获取