使用 R 将 RasterLayer 64 位转换为 RasterLayer 8 位

标签 r types geotiff

我正在使用 R 并使用以下库:raster、sp、rgeos、rgdal

我从 SpatialPointsDataFrame 创建了一个 RasterLayer。 可以使用

轻松导出该栅格
raster::writeRaster(ras8b,
                filename="filepath", format="GTiff" ,
                datatype='INT1U')

我遇到的问题如下: 我需要一个 8BitsPerPixel GeoTiff。但我使用的代码将栅格保存为 64 BitsPerPixel Raster。

我尝试按照在 StackOverflow 上找到的几个选项来解决该问题。例如: RasterLayer 16-bits into a RasterLayer 8-bits

第一个选项为我提供了 8 BitsPerPixel 栅格,但其中没有值,只有 NA。

或者我按照这篇文章将 R 中的 RasterLayer 转换为整数: https://gis.stackexchange.com/questions/175383/round-does-not-return-an-integer-raster-in-r/175384

但 R 继续将栅格存储为 64 位每像素栅格。

有人有解决办法吗? 如果您需要更多信息,请告诉我。 多谢。谨致问候。

最佳答案

似乎有效:

library(raster)
r <- raster(ncol=10,nrow=10)
r[] <- 1:100
x <- writeRaster(r, 'test.tif', datatype='INT1U', overwrite=TRUE)
dataType(x)
#[1] "INT1U"

library(rgdal)
GDALinfo('test.tif')
#  GDType hasNoDataValue NoDataValue blockSize1 blockSize2
#1   Byte           TRUE         255         10         10

但请注意,此格式仅存储 0 - 255 之间的值。所有其他值都变为 NA

关于使用 R 将 RasterLayer 64 位转换为 RasterLayer 8 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47095293/

相关文章:

R - 按列比较两行并将结果写入表格

减少大栅格列表上马赛克的内存使用量

c# - 将 T 限制为字符串和整数?

c++ - 使用 c++ api 访问 cv::Mat 中的元素 (x,y)

python - 查找 GeoTiff 图像中每个像素的纬度/经度坐标

gdal - 如何使用 GDAL (gdalwarp/gdal_translate) 设置 GeoTIFF 文件的 "band description"选项/标签

r - 要求 R 调试器不要截断堆栈调用

python - 如何从两列中提取数字范围并将两列中的范围打印为元组?

haskell - Haskell 中的矩阵构造函数和方法

python - 光栅源形状与给定索引不一致 1