【问题标题】:How Does R read nodatavalue tags from a geotiff - R Raster packageR如何从geotiff中读取nodatavalue标签-R Raster包
【发布时间】:2015-10-31 00:05:11
【问题描述】:

我遇到了一个不寻常的结果,R 中没有栅格数据值。 下面的代码——我有一个没有导入数据值的栅格(-9999)。 QGIS 也读取 nodatavalue,arcgis。 R在读取geotiff时,将nodata值分配给-INF。

我不知道为什么。但我决定尝试从头开始制作 - 结果相同。我的流程有什么问题?如何确保 R 正确读取 nodatavalues?

注意:我下面的示例是创建的栅格/geotiff。但我实际上是在进口一个组织生产的相当大的 geotiff。所以我无法控制它们的编写方式,但如果需要,我可以要求他们调整标签。

library(raster)
#create a raster from the matrix
myRaster1 <- raster(nrow=4, ncol=4)

#assign some random data to the raster
myRaster1[]<- 1:ncell(myRaster1)

myRaster1[5] <- -9999

#ensure the data have some decimals
myRaster1[2] <- 34.5

#assign no data value to raster
myRaster1@file@nodatavalue <- -9999

#make sure it worked
NAvalue(myRaster1)
myRaster1@file@nodatavalue

#view attributes of the raster
myRaster1


#write out raster
#write the geotiff - change overwrite=TRUE to overwrite=FALSE if you want to make sure you don't overwrite your files!
writeRaster(myRaster1,"newDel.tif","GTiff", overwrite=TRUE)


#import raster
newr <- raster("newDel.tif")
newr@file@nodatavalue

感谢您就 R 如何从 geotiff 导入标签提供任何建议/解释。

【问题讨论】:

    标签: r raster no-data


    【解决方案1】:

    感谢您创建可重现的示例,但您创建的示例可能不是最有用的。将值分配给插槽(@ 后面的名称)是不“合法的”。除非您具有 Raster 对象的高级知识,否则您应该使用用户界面(函数、方法)。所以,永远不要这样做:

    myRaster1@file@nodatavalue <- -9999
    

    此槽中的值仅供内部使用;并且仅与从磁盘获取值的对象相关。同样,

    newr@file@nodatavalue
    # [1] -Inf
    

    并不意味着"newDel.tif" 中的NA 值是以这种方式存储的。

    要在写入时设置某个值,请使用writeRaster 中的可用选项。

    现在,您的问题似乎是您有值 -9999 的文件应该被视为NA,但不知何故这不会发生。奇怪的是它可以在 QGIS 中工作,因为使用了相同的信息和相同的底层软件 (GDAL)。但这里有一个你可以处理的方法:

    创建一个 geotiff 文件,其值为 -9999,但未被识别为 NA

    library(raster)
    r <- raster(nrow=5, ncol=5)
    values(r) <- 1:25
    r[1:5] <- -9999
    writeRaster(r, 'test.tif', overwrite=TRUE)
    

    你的情况:

    x <- raster('test.tif')
    plot(x)
    

    这可能会解决它:

    NAvalue(x) <- -9999
    plot(x)
    

    【讨论】:

    • 嗨@RobertH 感谢您的回复!我遇到的问题(我不知道如何制作这个reprod)是R没有在geotiff标签中读取nodatavalue。我只是试图在重现工作流程中表示上述内容。当文件进入时,它重新分配了 NAValue -> -Inf 。我想了解为什么会这样。即使使用上面提供的示例,当我重新导入栅格时,NAvalue(raster) 是 -INF 而不是 -9999。因此,R 似乎没有正确读取 NA 值。非常愿意接受任何反馈,以确保 R 正确读取 geotiff 标签。
    • 在 github cran 镜像中搜索 nodatavalue 和 -Inf 可能会有所帮助。 link to this search
    • 它正常工作。您的文件可能有些奇怪。或者您可能需要更新 R/(r)gdal。你可以让其中一个文件可供下载吗?或者通过电子邮件将其发送给维护者或raster 包(即我)。
    • @RobertH 上面的解释非常有帮助(就像电子邮件一样)。我不明白引擎盖下发生了什么。现在我愿意。所以我会在文件上使用GDALinfo来查看nodata值。然后,当我编写栅格时,我可以使用 NAflag= 为输出 tif 分配我想要的 nodata 值。感谢您帮助我理解这一点!感谢您花费的时间!
    • 哦天哪 @BenBolker 这是 5 多年前的事了。我不确定我换工作时是否还有电子邮件交换,但我会看看!
    猜你喜欢
    • 2015-05-08
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2013-01-06
    • 1970-01-01
    • 2022-12-27
    • 2013-12-26
    相关资源
    最近更新 更多