QGIS gdal_contour 不遵守 netCDF scale_factor/offset

QGIS gdal_contour not respecting scale_factor/offset for netCDF

我正在处理一些 netCDF 文件并希望将 netCDF 参数的数据导入为栅格并为其构建等高线图层。为此,我正在使用 gdal_contour。

当我导入 netCDF 并在 QGIS 中选择一个参数 (water_temp) 时,栅格被毫无问题地加载到地图中,并显示大约 4 degC 到 31.25 degC 范围内的值。

然而,当我使用gdal_contour为它制作轮廓图层时,值在-15944到11250的范围内。这当然无济于事,除其他问题外,它需要永远生成层,因为我指定的间隔为 1.0,并且值范围远大于摄氏温度的预期值。

据我所知,可能 gdal_contour 要么不考虑栅格波段的偏移量和 scale_factor,要么不了解它。我知道 netCDF 将温度值存储为整数而不是浮点数以优化文件大小,但我有点困惑为什么 QGIS 在将 netCDF 读入栅格层时可以理解偏移量,但在生成等高线层时却不能.

我是不是遗漏了什么,或者使用 gdal_contour 我不知道的可能有什么注意事项?


我用来生成conotur层的命令是:

gdal_contour -b 1 -a water_temp -i 1.0 -snodata -30000.0 -f "ESRI Shapefile" NETCDF:"C:/path/to/input/netcdf/INPUT.nc":water_temp C:/path/to/output/layer/OUTPUT.shp

波段的 scale_factor、偏移量和相关元数据是:

已回答此问题 here

TLDR; Convert the netCDF to a GeoTIFF first using gdal_translate with the -unscale option to get GDAL to unpack the values, then perform gdal_contour on the GeoTIFF to get a contour layer with the correctly unpacked values.

但是,可能需要注意的重要一件事是 scaled/unscaled 数据类型,可能必须为 gdal_translate 显式设置(使用 -ot 选项)才能按顺序如果缩放后​​的数据类型小于未缩放的数据类型,则在缩放期间不会丢失数据精度。