R 中的测深栅格(负值栅格)未正确读入

Bathymetry raster in R (negative value raster) not read in correctly

我有一个显示水深的测深tif(即与表面的距离为负值)。在 arcMap 中,值的范围从 -1 到 -114。但是,当我导入到 R 时,值的范围从 128 到 255,最小值(即接近 128)对应于最深的水域(即接近 -114)。我想 R 中的 Raster 包会转换负值,但不清楚如何转换,因为它不仅仅是绝对值。

创建文件的软件似乎将值存储为 "signed byte",即范围从 -128 到 127 的值。

栅格包使用 GDAL 库读取这些文件。 GDAL 仅识别 "unsigned byte" 值,即范围从 0 到 255。这解释了为什么所有值都移动 128。

如果您在 ArcMap 中创建文件,您可以使用不同的数据类型保存它。

我认为您也可以使用这些解决方法。

使用偏移量:

library(raster)
r <- raster('file.tif')
offs(r) <- -128

或计算正确的值(并可能将其写入新文件):

r <- raster('file.tif')
r <- r - 128
r <- writeRaster(r, 'file2.tif', datatype='INT2S')