raster 和 terra 包的 writeRaster 之间的差异
Discrepancy between writeRaster of raster and terra package
我正在尝试使用 raster
和 terra
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
当我在其他软件中使用这些光栅时,nan 出现了问题。我试过使用 NAflag = -3.4e+38
但效果不佳
现在如何在使用 writeRaster
函数时使用 terra
R 包获得类似 raster
包的输出?
看来你要主动管理你的数据,不无道理:
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
是工具。其他人可能会分享更好的方法。
这是一个错误。它适用于 terra 1.5.40(您可以使用 install.packages('terra', repos='https://rspatial.r-universe.dev')
安装的开发版本)
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
我正在尝试使用 raster
和 terra
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
当我在其他软件中使用这些光栅时,nan 出现了问题。我试过使用 NAflag = -3.4e+38
但效果不佳
现在如何在使用 writeRaster
函数时使用 terra
R 包获得类似 raster
包的输出?
看来你要主动管理你的数据,不无道理:
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
是工具。其他人可能会分享更好的方法。
这是一个错误。它适用于 terra 1.5.40(您可以使用 install.packages('terra', repos='https://rspatial.r-universe.dev')
安装的开发版本)
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