Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >光栅中价值置换的不良后果

光栅中价值置换的不良后果
EN

Stack Overflow用户
提问于 2013-11-08 08:53:21
回答 1查看 155关注 0票数 1

我正在处理基于遥感的光栅文件,请参阅她的压缩示例文件:latlon.tif.gz

为了进行进一步的分析,我想将数值为-999 (即水)的细胞改为NA。我试过:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (i in 1:length(nlist)){
  r=raster(nlist[i])
  calc( r , function(x) { x[ x == -999 ] <- NA; return(x) } ,overwrite=T, filename=paste(names(r),"NA_edited"), format="GTiff")
}

f2 <- function(x) {
  v <- getValues(x)
  v[v<0]<-NA
  x <- setValues(x, v)
  return(x)
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (i in 1:length(nlist)){
  r=raster(nlist[i])
  r=f2(r)
  writeRaster(r,filename=paste(names(r),"NA_edited"), format="GTiff",overwrite=T)
}

其中nlist是文件位置的向量(即list.files())。

他们确实摆脱了-999并创建了NA值,但也由于某种原因改变了其他值。似乎所有的值都会稍微高一些,例如,一个层的最大值从160到177。

是正在进行一些插值,还是有一些我错过了的魔术呢?我无法在像raster(system.file("external/test.grd", package="raster"))这样的光栅上再现这个例子。这让我觉得这可能和文件格式有关吗?

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-08 11:12:17

由于您使用的是raster包,所以尝试使用函数NAvalue在光栅中指定NA值,而不是用NA来手动替换-999值。

根据?NAvalue

NAvalue返回用于将NA值写入磁盘的值(在“光栅”类型文件中)。如果设置Raster*对象的NA值,则在从文件中读取值时,此值将被解释为NA。内存中已经存在的值不会受到影响。 如果NA值小于零,则所有小于或等于该数字的值都将设置为NA。

帮助文件中的一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r1 <- raster(system.file("external/rlogo.grd", package="raster"))
r2 <- r1
NAvalue(r2)
NAvalue(r2) <- 255
#plot(r1)
#plot(r2)

针对您的问题,您可以加载光栅(例如,r <- raster(file)),然后使用函数NAvalue(r) <- -999,它应该指定光栅r中的所有值,values <= -999作为NA

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19864441

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文