QGIS gdal_contour不遵守netCDF的scale_factor / offset

时间:2019-11-14 19:18:54

标签: raster gdal netcdf qgis

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

当我导入netCDF并在QGIS中选择一个参数(water_temp)时,栅格将毫无问题地加载到地图中,并显示大约4摄氏度到31.25摄氏度之间的值。

但是,当我使用gdal_contour为其创建轮廓层时,该值在-15944到11250之间。这当然对其他问题没有帮助,但是生成该层却需要花费很长时间,因为我m指定一个1.0的间隔,并且值范围远远大于摄氏温度的预期温度。

据我所知,似乎gdal_contour要么不遵守光栅带的offset和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,偏移量和关联的元数据为:

  • add_offset = 20
  • missing_value = -30000
  • NETCDF_VARNAME = water_temp
  • scale_factor = 0.001
  • STATISTICS_MAXIMUM = 11250
  • STATISTICS_MEAN = 5475.011083141
  • STATISTICS_MINIMUM = -15944
  • STATISTICS_STDDEV = 5863.9957197805
  • units = degC
  • _FillValue = -30000

1 个答案:

答案 0 :(得分:0)

here回答了这个问题。

  

TLDR;首先将netCDF转换为GeoTIFF   gdal_translate-unscale选项可让GDAL解压缩   值,然后在GeoTIFF上执行gdal_contour以获取   轮廓层具有正确解压缩的值。

但是,可能要注意的一件事是缩放/非缩放数据类型,可能必须为gdal_translate显式设置(使用-ot选项),以便在缩放时不会丢失数据精度缩放的数据类型的大小小于未缩放的数据类型。