首页 > 解决方案 > R 中的水深测量栅格(负值栅格)未正确读取

问题描述

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

标签: r-rasternegative-number

解决方案


似乎创建文件的软件将这些值存储为“有符号字节”,即范围从 -128 到 127 的值。

光栅包使用 GDAL 库来读取这些文件。GDAL 仅识别“无符号字节”值,即范围从 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')

推荐阅读