2. 地形数据获取与预处理:DEM数据来源、格式与裁剪拼接

各位同学,咱们接着聊。上一章我们讲了地形评估的整体框架,这一章我带你落地——先把“地基”打好。说白了,就是搞到靠谱的DEM数据,然后把它收拾利索了。

做山地风电,地形数据就是你的眼睛。数据不准,后面所有分析都是白搭。我见过太多项目,前期数据没处理好,后期算发电量算出来偏差20%以上,回头一查,原来是DEM拼接处有个几米的错位。嗯,这种坑,咱们得绕着走。

2.1 DEM数据来源:SRTM vs ASTER GDEM

目前最常用的开源DEM数据,就两个:SRTM和ASTER GDEM。我个人的习惯是,国内项目优先用SRTM,国外项目看情况混着用。为什么?听我慢慢说。

数据源 空间分辨率 覆盖范围 垂直精度 发布时间
SRTM (Shuttle Radar Topography Mission) 30m (1弧秒) / 90m (3弧秒) 北纬60° ~ 南纬56° ±16m (90%置信度) 2000年采集,后续多次更新
ASTER GDEM (Advanced Spaceborne Thermal Emission and Reflection Radiometer) 30m 全球 (北纬83° ~ 南纬83°) ±20m (95%置信度) 2009年发布V1,2019年V3

SRTM 是航天飞机雷达测图任务的结果。它的数据一致性非常好,因为是一次性采集的。我在云南一个项目里用过,山脊线、沟谷的形态非常清晰,做风资源微观选址时,基本不用怎么修。

ASTER GDEM 是光学立体像对生成的。它的覆盖范围更广,但有个毛病——在陡峭山区、雪地、水域附近容易出现异常值。我记得有一次在四川做项目,ASTER GDEM在海拔4000米以上的区域出现了明显的“坑洞”,后来不得不换成SRTM补上。

我的建议:

  • 国内山地风电项目,首选SRTM 30m数据。精度够用,稳定性好。
  • 如果项目区在SRTM覆盖边缘(比如高纬度地区),或者需要更广的覆盖,再考虑ASTER GDEM V3。
  • 两个数据可以对比使用。我一般会下载两份,做差值分析,看看有没有异常区域。

小技巧: 下载SRTM数据时,注意看版本。现在USGS提供的是SRTM Plus (NASADEM),精度比老版本好不少。我习惯用NASADEM,省去后期很多校正工作。

2.2 数据格式:GeoTIFF 为什么是标配?

你下载下来的DEM,大概率是GeoTIFF格式。为什么大家都用这个?说白了,它把“图像”和“地理坐标”打包在一起了。

普通TIFF只存像素值,比如每个格子是灰色还是彩色。但GeoTIFF额外存了:这个像素对应地球上的哪个经纬度?坐标系是什么?投影参数是什么?高程值怎么换算?

举个例子,你打开一个GeoTIFF文件,用GIS软件一读,它自动就知道这张图覆盖的是东经102°到103°,北纬24°到25°的区域。不需要你手动去配准,省大事了。

我在项目中遇到过最头疼的事,就是有人给我发了一个“裸TIFF”——没有地理信息。结果我得花半天时间去找控制点,手动配准。嗯,从那以后,我要求所有数据必须带GeoTIFF元数据,否则不收。

注意: 下载数据时,检查一下GeoTIFF是否包含完整的坐标参考系统(CRS)。有些网站下载的数据,CRS信息丢失了,或者用的是旧版WGS84。我建议统一用EPSG:4326(WGS84经纬度)或EPSG:3857(Web墨卡托),看项目需求。

2.3 数据拼接与裁剪:把碎片拼成完整地图

一个风电项目区,少说几十平方公里,大一点的上百平方公里。而SRTM数据是按1°×1°的图幅分发的。也就是说,你下载下来的是很多个小方块。第一步,就是把这些方块拼起来。

我常用的工具是GDAL,开源、稳定、命令行操作,适合批量处理。下面是我常用的流程:

2.3.1 数据拼接(Mosaic)

拼接的核心命令是 gdal_merge.py。假设你有三个文件:srtm_01.tif, srtm_02.tif, srtm_03.tif,想拼成一个大的。

# 基本拼接命令
gdal_merge.py -o mosaic.tif -of GTiff srtm_01.tif srtm_02.tif srtm_03.tif

# 如果数据有重叠区域,可以指定拼接方法
# -n 参数设置无效值(比如海洋区域的-32768)
# -a 参数设置重叠区域的取平均值
gdal_merge.py -o mosaic.tif -of GTiff -n -32768 -a srtm_01.tif srtm_02.tif srtm_03.tif

这里有个坑:不同图幅的DEM,在接边处可能会有高程差异。尤其是ASTER GDEM,不同景的数据之间可能有几米的偏差。我曾经在贵州一个项目里,拼接后山脊线出现了明显的“台阶”。

避坑指南: 拼接后一定要做接边检查。我习惯用QGIS打开拼接后的文件,把色带拉伸到最大,看看接缝处有没有颜色突变。如果有,可以用 gdalwarp-r 参数做平滑处理,或者用 gdal_fillnodata.py 填补空洞。

2.3.2 数据裁剪(Clip)

拼接完的大文件,往往覆盖了比项目区大得多的范围。我们需要把它裁剪到项目边界内。项目边界通常是一个Shapefile或GeoJSON文件。

# 用矢量边界裁剪DEM
gdalwarp -cutline project_boundary.shp -crop_to_cutline -of GTiff mosaic.tif clipped_dem.tif

# 如果边界是矩形,也可以用经纬度范围裁剪
gdal_translate -projwin 102.5 25.2 103.0 24.8 -of GTiff mosaic.tif clipped_dem.tif

注意:-projwin 的顺序是 左上角经度 左上角纬度 右下角经度 右下角纬度。这个顺序容易搞反,我刚开始用的时候栽过跟头。

2.3.3 重采样与投影转换

有时候,原始DEM的分辨率或投影不适合你的分析。比如,你后续要用WindSim或WAsP做风资源模拟,它们可能要求特定的投影。这时候需要重采样。

# 重采样到10m分辨率,使用双线性插值
gdalwarp -tr 10 10 -r bilinear -t_srs EPSG:32650 clipped_dem.tif resampled_dem.tif

重采样方法的选择有讲究:

  • 最近邻法(near): 速度快,但会丢失细节。适合分类数据,不适合DEM。
  • 双线性插值(bilinear): 平滑,适合DEM。我大部分项目用这个。
  • 三次卷积(cubic): 更平滑,但计算量大。适合地形起伏大的区域。

我个人习惯:山地风电用双线性就够了。三次卷积虽然理论上更精确,但实际差异很小,反而可能引入伪影。

2.4 知识体系框架

下面这张图,帮你理清这一章的核心逻辑:

地形数据获取与预处理流程 数据来源 SRTM (30m/90m) | ASTER GDEM (30m) 数据格式 GeoTIFF(含坐标参考系统CRS) 预处理步骤 拼接 → 裁剪 → 重采样 → 投影转换 关键工具与注意事项 • 工具:GDAL (gdal_merge, gdalwarp) • 拼接:注意接边处高程差异 • 裁剪:用矢量边界或经纬度范围 • 重采样:山地用双线性插值 • 投影:统一为项目所需坐标系 常见坑点: 1. CRS信息丢失 → 手动配准 2. 拼接台阶 → 平滑处理 3. 无效值未处理 → 影响分析 4. 投影顺序搞反 → 数据错位 总结:数据质量决定分析上限。预处理花1小时,后面省10小时。

2.5 实战经验总结

最后,我把自己这些年踩过的坑,总结成几条铁律:

  1. 数据源选对,事半功倍。 国内山地风电,SRTM 30m是性价比最高的选择。别盲目追求高分辨率,12.5m的ALOS数据虽然好,但处理起来麻烦很多。
  2. 预处理要留备份。 我每次做完拼接、裁剪,都会把原始数据、中间数据、最终数据分别存档。万一后面发现处理错了,还能回退。
  3. 检查!检查!再检查! 预处理完成后,一定要用GIS软件可视化检查一遍。看看有没有空洞、异常值、接边错位。我曾经因为没检查,拿着有空洞的DEM去算风资源,结果在空洞区域算出来风速为0——白白浪费了两天时间。
  4. 坐标系统一。 项目所有数据(DEM、风机点位、测风塔)必须使用同一个坐标系。我见过最离谱的事,是有人把WGS84和CGCS2000混着用,结果风机位置偏了500米。

一句话总结: 地形数据预处理,花的时间越多,后面分析越顺。别嫌麻烦,这是值得的。


公众号:蓝海资料掘金营,微信deep3321