R 如何从 geotiff - R Raster 包中读取 nodatavalue 标签
How Does R read nodatavalue tags from a geotiff - R Raster package
我 运行 遇到一个不寻常的结果,在 R 中栅格没有数据值。
下面的代码——我有一个没有导入数据值的栅格 (-9999)。 QGIS 读取无数据值,arcgis 也是如此。 R,当它读入 geotiff 时,将 nodata 值分配给 -INF.
我不知道为什么。但我决定尝试从头开始制作一个 - 结果相同。我的过程有什么问题?如何确保 R 正确读取无数据值?
注意:我下面的示例是创建的栅格/geotiff。但我实际上是在导入一个组织生产的相当大的 geotiffs。所以我无法控制它们的编写方式,但如果需要,我可以要求他们调整标签。
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 导入标签的任何建议/解释。
感谢您创建可重现的示例,但您创建的示例可能不是最有帮助的。为槽(@
后面的名称)赋值不是 "legal"。除非您对 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)
我 运行 遇到一个不寻常的结果,在 R 中栅格没有数据值。 下面的代码——我有一个没有导入数据值的栅格 (-9999)。 QGIS 读取无数据值,arcgis 也是如此。 R,当它读入 geotiff 时,将 nodata 值分配给 -INF.
我不知道为什么。但我决定尝试从头开始制作一个 - 结果相同。我的过程有什么问题?如何确保 R 正确读取无数据值?
注意:我下面的示例是创建的栅格/geotiff。但我实际上是在导入一个组织生产的相当大的 geotiffs。所以我无法控制它们的编写方式,但如果需要,我可以要求他们调整标签。
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 导入标签的任何建议/解释。
感谢您创建可重现的示例,但您创建的示例可能不是最有帮助的。为槽(@
后面的名称)赋值不是 "legal"。除非您对 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)