我正在使用gdal.ReprojectImage从Lambert保形到经度/纬度坐标的GRIB栅格,并且lon / lat域的某些部分(或多或少)落在输入网格之外。我希望结果在那些越界区域中没有数据值。结果应该是这样,白色表示没有数据区域,浅粉红色表示值为零:
HRRR APCP 2019-01-22 12Z f03 (contourf)
那是正确的结果,但是它是在Silhouettef函数内部发生的,对我不起作用。我不只是想画画。我需要数据。请注意,在这种情况下,输入数据集没有任何无数据值。
如果我定义了一个无数据值,但在调用ReprojectImage之前未明确填充栅格带,则结果中的零值和越界区域都将设置为零:
代码:
dest_ds.GetRasterBand(1).SetNoDataValue(ndv)
gdal.ReprojectImage(source_ds,
dest_ds,
source_ds.GetProjection(),
dest_ds.GetProjection(),
gdalconst.GRA_Bilinear)
HRRR APCP 2019-01-22 12Z f03 (no ndv pre-fill)
如果我通过添加明确填充无数据值
代码:dest_ds.GetRasterBand(1).Fill(ndv)
在调用gdal.ReprojectImage之前,原始网格中的所有零都将投影为无数据值。
HRRR APCP 2019-01-22 12Z f03 (ndv pre-fill)
当ReprojectImage遇到全零的插值邻域时,看起来好像将输出网格的那些区域保留为其默认值。就像源代码中存在某种continue语句,这在这里造成了问题。
我想我可以创建一个遮罩,对其进行重新投影,然后将结果应用于重新投影的数据,但是我缺少更好的解决方案吗?
在Ubuntu Linux 18.04上使用python3-gdal 2.2.3。