第一章 地形图基础认知:DEM/DSM/DTM的区别、坐标系与投影基础、地形图数据来源

各位同学好,我是老张。在风电行业摸爬滚打了十几年,地形图这块儿,说实话是很多风资源工程师的「拦路虎」。今天咱们就来聊聊地形图的基础认知,把DEM、DSM、DTM这些概念彻底掰扯清楚。

1.1 DEM/DSM/DTM:三个容易混淆的「地形兄弟」

我第一次接触这三个概念时,也懵过。说白了,它们都是数字化的地面模型,但关注的点不一样。

类型 全称 包含什么 风电场景用途
DEM 数字高程模型 裸地表高程 基础地形分析、坡度计算
DSM 数字表面模型 地表+建筑物+植被 机位点遮挡分析
DTM 数字地形模型 DEM + 地形特征要素 等高线生成、三维建模

DEM 是最干净的。它只关心地面本身,树啊、房子啊,统统去掉。我在做风电场宏观选址时,第一步就是拿DEM算坡度——坡度超过20%的地方,基本就不考虑了,施工成本太高。

DSM 就「杂」多了。它把地表上的一切都记录下来。你想想看,如果直接用DSM做风资源分析,那树冠的高度会被误认为是地面高度,结果肯定不准。但DSM有个妙用——评估机位点的遮挡情况。我记得有个项目,业主说某个机位点测风塔数据很好,结果我用DSM一分析,发现东南方向有片树林刚好挡住了主风向。嗯,这个坑算是提前避开了。

DTM 可以理解为DEM的「升级版」。它不仅包含高程,还加入了山脊线、山谷线、断裂线这些地形特征。做精细化道路设计时,DTM比DEM好用得多。

核心要点:

  • 做宏观选址、坡度分析 → 用DEM
  • 做微观选址、遮挡分析 → 用DSM
  • 做道路设计、土方计算 → 用DTM

1.2 坐标系与投影基础:别让你的数据「错位」

这个坑我踩过,而且踩得很深。几年前有个项目,我从不同渠道下载了地形数据,一个用的是WGS84经纬度,另一个用的是UTM投影坐标。结果叠在一起,机位点偏了将近500米。你说吓人不吓人?

咱们风电行业常用的坐标系就几种:

  • WGS84:全球通用,经纬度坐标。SRTM、ASTER GDEM这些公开数据基本都是WGS84。
  • CGCS2000:中国国家大地坐标系,国内项目现在强制要求用这个。
  • UTM投影:把球面展平,单位是米。做距离、面积计算时必须用投影坐标。

我个人习惯是:数据入库时统一用CGCS2000,做分析时转成UTM投影。为什么?因为CGCS2000是国内的法定坐标系,出图、报审都认这个。而UTM投影方便算距离——你总不能用经纬度去算两个机位点之间的距离吧?那误差太大了。

小技巧:

用GDAL做坐标系转换时,记得加上 -t_srs EPSG:xxxx 参数。比如转CGCS2000就是 -t_srs EPSG:4490。我曾经见过有人直接拿ArcGIS的「定义投影」当「投影转换」用,结果数据全乱了。这两个功能完全不是一回事,千万别搞混。

1.3 地形图数据来源:SRTM、ASTER GDEM怎么选?

做风电项目,数据来源就那么几个。我给大家排个序:

数据源 分辨率 覆盖范围 我的评价
SRTM 30m/90m 全球(南北纬60°) 最稳定,首选
ASTER GDEM 30m 全球(南北纬83°) 细节多,但噪声也大
ALOS World 3D 30m 全球 精度高,但数据量大
TanDEM-X 12m/30m 全球 商业数据,贵但好

SRTM 是我用得最多的。它由航天飞机雷达测绘,数据一致性很好。国内大部分地区都能用,只有青藏高原边缘有些空洞。遇到空洞怎么办?我一般用ASTER GDEM来补。

ASTER GDEM 分辨率也是30米,但细节更丰富。不过它有个毛病——噪声大。尤其是在山区,经常出现一些莫名其妙的「尖刺」。我曾经在云南一个项目上,用ASTER GDEM算出来的坡度比实际大了将近5度。后来换成SRTM,结果就合理多了。

所以我的建议是:优先用SRTM,遇到空洞用ASTER GDEM补,最后用ALOS World 3D做验证。如果项目预算充足,直接买TanDEM-X的12米数据,那效果确实好。

避坑指南:

我曾经在新疆一个项目上,直接用ASTER GDEM做微观选址,结果发现好几个机位点都落在了「假山包」上。后来一查,是数据噪声导致的。从那以后,我每次拿到DEM数据,都会先做一步「中值滤波」去噪。代码很简单:

# Python示例:用GDAL做中值滤波
from osgeo import gdal
import numpy as np
from scipy.ndimage import median_filter

ds = gdal.Open('input_dem.tif')
band = ds.GetRasterBand(1)
data = band.ReadAsArray()

# 3x3中值滤波
filtered = median_filter(data, size=3)

# 写回文件
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.Create('output_dem.tif', ds.RasterXSize, ds.RasterYSize, 1, band.DataType)
out_ds.GetRasterBand(1).WriteArray(filtered)
out_ds.SetGeoTransform(ds.GetGeoTransform())
out_ds.SetProjection(ds.GetProjection())
out_ds = None

1.4 本章知识体系

下面这张图是我自己整理的,把本章的核心逻辑串起来了。你一看就明白:

地形图基础认知知识体系 DEM / DSM / DTM 坐标系与投影 数据来源 裸地表高程 坡度分析 / 宏观选址 地表+植被+建筑物 遮挡分析 / 微观选址 DEM + 地形特征要素 道路设计 / 土方计算 WGS84 CGCS2000 UTM投影 SRTM ASTER ALOS TanDEM-X 核心原则 宏观选址用DEM → 微观选址用DSM → 道路设计用DTM 数据入库用CGCS2000 → 分析计算用UTM投影

这张图把本章的核心逻辑都串起来了。你仔细看,从左到右分别是三大地形模型、坐标系体系、数据来源。最下面是我总结的核心原则,做项目时照着这个思路走,基本不会出错。

好了,地形图的基础认知就聊到这儿。记住一句话:数据是死的,但用法是活的。同样的DEM数据,有人能做出花来,有人只能画个等高线。差别在哪?就在你对这些基础概念的理解深度上。

专注资料整理