微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据数据类型,terra::writeRaster 的意外最大可能值

如何解决根据数据类型,terra::writeRaster 的意外最大可能值

使用 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,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

解决方法

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

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,NAflag=0,overwrite=TRUE)
values(x)
#[1,] 65535
#[4,]   NaN

4 字节无符号整数

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


x <- writeRaster(r,overwrite=TRUE,)
values(x)
#          lyr.1
#[1,] 4294967295
#[4,]        NaN

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?