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、偏移量和相关元数据是:
- 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
- 单位=摄氏度
- _FillValue=-30000
已回答此问题 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
选项)才能按顺序如果缩放后的数据类型小于未缩放的数据类型,则在缩放期间不会丢失数据精度。
我正在处理一些 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、偏移量和相关元数据是:
- 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
- 单位=摄氏度
- _FillValue=-30000
已回答此问题 here。
TLDR; Convert the netCDF to a GeoTIFF first using
gdal_translate
with the-unscale
option to get GDAL to unpack the values, then performgdal_contour
on the GeoTIFF to get a contour layer with the correctly unpacked values.
但是,可能需要注意的重要一件事是 scaled/unscaled 数据类型,可能必须为 gdal_translate 显式设置(使用 -ot
选项)才能按顺序如果缩放后的数据类型小于未缩放的数据类型,则在缩放期间不会丢失数据精度。