Растр батиметрии в R (растр с отрицательным значением) не считывается правильно

У меня есть батиметрический tif, показывающий глубину воды (то есть расстояние от поверхности в отрицательных значениях). В arcMap значения варьируются от -1 до -114. Однако, когда я импортирую в R, значения варьируются от 128 до 255 с наименьшими значениями (то есть около 128), соответствующими наиболее глубоким водным областям (то есть около -114). Я предполагаю, что пакет Raster в R преобразует отрицательные значения, но неясно, как это происходит, поскольку это не просто абсолютное значение.


person Val    schedule 17.07.2018    source источник


Ответы (1)


Похоже, что программа, создавшая файл, сохранила значения как «подписанный байт», то есть значения в диапазоне от -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')
person Robert Hijmans    schedule 18.07.2018