raster和terra包的writeRaster之间存在差异

3

我正在尝试使用rasterterra R包将栅格以asc格式编写。我正在使用以下代码

library(terra)
library(raster)

f <- system.file("external/test.grd", package="raster")
r1 <- raster(f)
plot(r1)
writeRaster(r1, paste('Try1','.asc', sep=''), overwrite=TRUE)

r2 <- rast(f)
writeRaster(r2, paste('Try2','.asc', sep=''), overwrite=TRUE)

现在,如果您打开Try1.asc文件,您会发现NODATA_value为-3.4e+38,而在Try2.asc中它是nan。 enter image description here

enter image description here

当我在其他软件中使用这些光栅图时,nan会引起问题。我尝试使用NAflag = -3.4e+38,但也没有起作用。 enter image description here

现在我该如何在使用writeRaster函数时,像raster包一样使用terra R包来获得输出?


packageVersion('terra')? - Chris
2个回答

1

这是一个bug。它适用于Terra 1.5.40及更高版本。

library(terra)
#terra 1.5.40   

r <- rast(ncol=2, nrow=2, vals=c(0,NA,1,NA))
f <- "test.asc"

r = writeRaster(r, f, overwrite=TRUE, NAflag=-99) 
readLines(f)
#[1] "ncols        2"                
#[2] "nrows        2"                
#[3] "xllcorner    -180.000000000000"
#[4] "yllcorner    -90.000000000000" 
#[5] "dx           180.000000000000" 
#[6] "dy           90.000000000000"  
#[7] "NODATA_value  -99"             
#[8] " 0.0 -99"                      
#[9] " 1 -99"                        

r
#class       : SpatRaster 
#dimensions  : 2, 2, 1  (nrow, ncol, nlyr)
#resolution  : 180, 90  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 
#source      : test.asc 
#name        : lyr.1 
#min value   :     0 
#max value   :     1 
 

0

看起来你需要积极地管理你的数据,这并不是不合理的:

r3 <- rast(f, opts='NODATA_value=-3.4e+38') # didn't have desired effect
r4 <- classify(r3, cbind(NaN, -3.4e+38))
writeRaster(r4, paste('TRY3','.asc', sep = ''), overwrite=TRUE)
# in gedit
ncols        80
nrows        115
xllcorner    178400.000000000000
yllcorner    329400.000000000000
cellsize     40.000000000000
NODATA_value  nan
 -3.3999999521443642491e+38 -3.3999999521443642491e+38 -3.3999999521443642491e+38 -3.3999999521443642491e+38 -3.3999999521443642491e+38 -3.3999999521443642491e+38

packageVersion('terra')
[1]1.5.39’

-3.4e+83通常不会生成很好的图表,但是classify是一个好工具。可能还有其他人会分享更好的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接