首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查栅格值在数据类型范围内。

检查栅格值在数据类型范围内。
EN

Stack Overflow用户
提问于 2022-08-06 16:18:22
回答 1查看 80关注 0票数 0

我正在处理{terra}包中的光栅数据。我想把我的数据存储在一个最佳的数据类型,以存储和速度。例如,我运行一个函数,它输出1到200之间的整数数据。所以我把光栅保存为INT1U,它的范围是0到255,而不是FLT4S,它可以处理小数和一个很大的范围。不过,我的疑问是,如果我的数据与我所写的类型不匹配,它就会变成NA。我希望有一个错误(因为它告诉我,在输出中有我不希望看到的数据)。对怎么做有什么想法吗?我目前的努力是:

说明我的问题:

代码语言:javascript
复制
library(terra)

test_rast <- rast(ncol = 2, nrow = 2, vals = c(-10, 50, 100, 10000000000))

test_rast <- writeRaster(test_rast, 'test.tif', wopt = list(datatype = 'INT1U'), overwrite=TRUE)

values(test_rast)

     lyr.1
[1,]   NaN
[2,]    50
[3,]   100
[4,]   NaN

我想的解决办法之一就是测试。就像这样:

代码语言:javascript
复制
library(terra)

test_rast <- rast(ncol = 2, nrow = 2, vals = c(-10, 50, 100, 10000000000))

int1u_min <- 0
int1u_max <- 254

if (minmax(test_rast)[[1]] >= int1u_min & minmax(test_rast)[[2]] < int1u_max) {
    test_rast <- writeRaster(test_rast, 'test.tif', wopt = list(datatype = 'INT1U'), overwrite=TRUE)
} else {
    stop()
}

正如您所看到的,这不是一个非常优雅的解决方案。此外,我将不得不手动设置每个光栅数据类型范围的可接受的最小和最大。可能是通过将这个表复制到我的脚本中。

https://www.rdocumentation.org/packages/raster/versions/3.5-15/topics/dataType

有更好的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-07 07:08:45

使用terra >= 1.6-6,您现在得到一个警告。

代码语言:javascript
复制
library(terra)
r <- rast(ncol = 2, nrow = 2, vals = c(-10, 50, 100, 10000000000))
r <- writeRaster(r, 'test.tif', datatype = 'INT1U', overwrite=TRUE)
#Warning message:
#[writeRaster] detected values outside of the limits of datatype INT1U
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73261405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档