Skip to content

使用 GDAL 重投影与聚合栅格数据

来源说明 本文翻译自 Spatial Thoughts,原作者为 Ujaval Gandhi

原文链接: https://spatialthoughts.com/2024/04/02/aggregate-and-gdal/
本文仅供学习交流,版权归原作者所有。

当处理具有不同投影和分辨率的栅格数据集时,通常希望能将它们重投影到相同的坐标系,并对齐到相同的像素网格上。在本文中,我们将探索开源 GDAL 工具 gdalwarp 中最近引入的选项,这些选项使该过程变得更加简单高效。特别是,我们将重点介绍 -r sum(求和重采样)、-r average(平均值重采样)和 -tap(目标对齐像素)。

我们将选取以下 3 个栅格数据集,将它们裁剪、重采样并对齐到一个通用的像素网格上:

  • LandScan Global:高质量的全球人口网格数据,分辨率为 1km,坐标系为地理坐标系 WGS84 Lat/Lon (EPSG:4326)。
  • GHS Population Grid:分辨率为 100m 的全球人口数据集,使用 World Mollweide 等面积投影 (ESRI:54009) 发布。
  • NLCD Tree Canopy Cover:分辨率为 30m 的网格数据集,包含树冠覆盖百分比估算,使用 NAD83 CONUS Alberts 投影 (EPSG:5070)。

如你所见,我们拥有的数据集具有差异巨大的像素大小和投影。如果我们想将它们相互比较——我们必须首先在一个统一的像素网格上协调它们。我们将学习如何将这些数据重投影、重采样并对齐到 NAD83 California Albers 投影 (EPSG:3311) 以及 1km 的分辨率上。

本文假设读者熟悉 GDAL 命令行工具。关于安装和使用说明,你可以查阅我的 Mastering GDAL Tools 课程资料。

裁剪栅格 (Clipping Rasters)

首先,我们使用从 美国人口普查局 获取的 Shapefile 将栅格裁剪到加利福尼亚州的边界。我们使用 -cutline 参数指定多边形 Shapefile california.shp

gdalwarp -cutline california.shp -crop_to_cutline \
    landscan.tif landscan_clipped.tif

gdalwarp -cutline california.shp -crop_to_cutline \
    ghsl.tif ghsl_clipped.tif

gdalwarp -cutline california.shp -crop_to_cutline \
    nlcd_tcc.tif nlcd_tcc_clipped.tif

栅格重采样与聚合 (Resampling and Aggregating)

当将栅格重投影到目标投影时,我们需要指定重采样方法。GDAL(以及许多其他程序)使用的默认重采样方法是 最近邻法 (Nearest Neighbor)。这种方法速度快,在源像素和目标像素大小相似时效果尚可。但如果你将 30m 的栅格降采样到 1km——最近邻重采样会给出错误的结果。此外,在重采样人口数据集时,我们必须对目标像素内的所有像素求和,以获得目标像素的准确数值。

GDAL 3.1 版本引入了一种新的重采样方法 sum。这种方法对于聚合人口数据集非常有用,目标像素的值是通过对落在该目标像素内的源像素进行求和计算得出的。此方法使用加权和——意味着像素的值将根据其与目标像素的重叠程度进行加权(即,如果一个像素只有 50% 在目标像素内,求和时只计算其一半的值)。

在尝试对齐像素网格时,另一个有用的选项是 -tap(Target Aligned Pixels,目标对齐像素),它确保具有相同投影和分辨率的栅格之间没有亚像素偏移。

让我们应用这些参数,将人口栅格重采样并重投影到 EPSG:3311 的通用投影和 1km x 1km 的像素网格上。

gdalwarp -t_srs EPSG:3311 -tr 1000 1000 -r sum  -tap \
    landscan_clipped.tif landscan_resampled.tif

gdalwarp -t_srs EPSG:3311 -tr 1000 1000 -r sum -tap \
    ghsl_clipped.tif ghsl_resampled.tif

最后,我们要处理 NLCD 树冠覆盖 (TCC) 栅格。该栅格包含表示每个 30m x 30m 像素内树木覆盖百分比的像素。当我们将其降采样到 1km x 1km 网格时,我们可以使用 average(平均值)重采样方法。这将通过平均包含在其中的所有源像素来给出目标像素的树木覆盖率。

gdalwarp -t_srs EPSG:3311 -tr 1000 1000 -r average \
    nlcd_tcc_clipped.tif nlcd_tcc_resampled.tif -tap

重采样操作的结果是,现在我们已经缩放并对齐了栅格,它们具有相同的像素网格,可以相互进行比较。