【问题标题】:unexpected maximum possible values for terra::writeRaster according to datatypeterra::writeRaster 根据数据类型的意外最大可能值
【发布时间】:2021-09-13 21:17:34
【问题描述】:

使用terra::writeRaster 时,允许写入的最大可能值取决于数据类型(INT1UINT2SINT2U...)。

文档告诉“当写入整数值时,最低可用值(给定数据类型)用于[存储NA,我想]用于有符号类型,最高值用于无符号值。”。这应该为无符号类型提供以下范围:

INT1U:0-254(2^8-1,NA 存储减一)

INT2U:0-65,534(2^16-1,NA 存储减一)

INT4U : 0-4,294,967,294(2^32-1,NA 存储减一)

但是,对于无符号数据类型 INT2UINT4U,我在机器上观察到的最大值不符合这些预期:

INT2U : 65,532 INT4U : 4,294,967,292

为什么会出现这个意外的最大值?我问这个问题是因为对于安全的代码编写来说,在编写文件之前准确地知道这些最大值并不是微不足道的。

我在 Windows 10 下工作。这是我用来检查的几行代码:

library(terra)
terra version 1.3.4
Warning message:
package ‘terra’ was built under R version 4.0.5 

r <- rast(ncols=1, nrows=2)
values(r) <- c(65532,65533)

writeRaster(r,"test.tif",wopt=list(datatype="INT2U"))

t <- rast("test.tif")
values(t)
     lyr.1
[1,] 65532
[2,]   NaN

【问题讨论】:

    标签: raster terra


    【解决方案1】:

    有了开发版本,我现在得到了预期的结果

    library(terra)
    r <- rast(ncols=1, nrows=4)
    values(r) <- 65533:65536
    

    2 字节无符号整数

    x <- writeRaster(r,"test.tif", datatype="INT2U", overwrite=TRUE)
    values(x)
    #     lyr.1
    #[1,] 65533
    #[2,] 65534
    #[3,]   NaN
    #[4,]   NaN
    
    x <- writeRaster(r,"test.tif", datatype="INT2U", NAflag=0, overwrite=TRUE)
    values(x)
    #[1,] 65533
    #[2,] 65534
    #[3,] 65535
    #[4,]   NaN
    

    4 字节无符号整数

    values(r) <- 4294967293:4294967296
    x <- writeRaster(r,"test.tif", datatype="INT4U", overwrite=TRUE)
    values(x)
    #          lyr.1
    #[1,] 4294967293
    #[2,] 4294967294
    #[3,]        NaN
    #[4,]        NaN
    
    
    x <- writeRaster(r,"test.tif", datatype="INT4U", NAflag=0, overwrite=TRUE,)
    values(x)
    #          lyr.1
    #[1,] 4294967293
    #[2,] 4294967294
    #[3,] 4294967295
    #[4,]        NaN
    

    【讨论】:

    • 谢谢。它完美地工作。 terra 发展如此之快,开发版本是必须的!
    猜你喜欢
    • 2014-09-13
    • 2022-12-28
    • 1970-01-01
    • 2019-01-02
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多