栅格和Terra包装的作家之间的差异

发布于 2025-02-04 05:39:00 字数 994 浏览 4 评论 0原文

我正在尝试使用栅格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。

​我尝试使用naflag = -3.4e+38也无法正常工作

现在,我如何使用raster使用terra r软件包的输出,而使用writeraster函数?

I am trying to write rasters in asc format using raster and terra R package. I am using the following code

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)

Now if you open the Try1.asc, you will see that the NODATA_value is -3.4e+38 while it is nan in Try2.asc
enter image description here

enter image description here

nan is creating problem when I am using these rasters in other software. I have tried using NAflag = -3.4e+38 which is not working as well
enter image description here

Now how can I have the output like raster package using terra R package while using writeRaster function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

早乙女 2025-02-11 05:39:01

那是一个错误。它与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 
 

That is a bug. It works with terra 1.5.40 and higher

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 
 
浮华 2025-02-11 05:39:01

看来您必须积极管理数据,而不是不合理的:

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通常会制作地块,嗯,不是很好。但是分类是工具。也许别人分享的更好方式。

It appears you have to actively manage your data, not unreasonable:

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 generally makes plots, well, not great. But classify is the tool. Probably better ways that others will share.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文