加载 tiff 时图层名称为 bigfile[,varname]

问题描述 投票:0回答:1

我正在使用 ClimateNA 网站 (https://adaptwest.databasin.org/pages/adaptwest-climatena/) 的 tif 文件栅格,每个文件约为 18 到 40MB。所以我无法在这里上传文件,下载整套文件会花费大量时间(所以还没有要求您这样做!)。所以不知道如何使我的问题更具可重现性。但我会尽力解释。

使用来自

rast()
的函数
terra
加载栅格文件(每个栅格仅包含 1 层)时,我得到以下信息:

class       : SpatRaster 
dimensions  : 7617, 7688, 1  (nrow, ncol, nlyr)
resolution  : 1000, 1000  (x, y)
extent      : -4352000, 3336000, -3341000, 4276000  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
source      : Normal_1991_2020_bFFP.tif 
name        : bigfile[, varname] 
min value   :                  0 
max value   :                292 

注意源是正确的,但名称已更改为“bigfile[, varname]”。对于其他较小尺寸的栅格,这种情况不会发生。我可以用

terra::name()
重命名图层。我并没有真正尝试使用
name =
参数在函数内手动分配名称。但这仅适用于 1 个文件。我需要以自动化的方式与几个人一起工作。

所以,我的主要问题是我实际上使用栅格列表并在

rast()
中读取它们,如下所示:


# produces a list of name from the previously defined folder containing all the raster tif files
Normrast<- list.files(path = clim.folder, pattern='.tif$', all.files=TRUE, full.names=TRUE)

# Get and stack Climate rasters from folder above
NormStack<-terra::rast(Normrast)`

这会产生以下对象:

> NormStack
class       : SpatRaster 
dimensions  : 7617, 7688, 12  (nrow, ncol, nlyr)
resolution  : 1000, 1000  (x, y)
extent      : -4352000, 3336000, -3341000, 4276000  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
sources     : Normal_1991_2020_CMD.tif  
              Normal_1991_2020_EMT.tif  
              Normal_1991_2020_FFP.tif  
              ... and 9 more source(s)
names       : bigfi~name], bigfi~name], bigfi~name], bigfi~name], bigfi~name], bigfi~name], ... 
min values  :           0,       -67.9,           0,       -27.3,       -45.1,       -14.7, ... 
max values  :        2185,        29.2,         365,        30.4,        28.4,        38.8, ...

如果我尝试使用 terra::names() 更改名称,它似乎可以通过使用 list.files() 从所有文件所在的文件夹中分配名称 vecto 来工作,但我想知道为什么会发生这种行为。我还担心确保使用 terra::names() 的分配工作正常,更多的文件使交叉检查比使用大约 10 个光栅文件时更加复杂。也许有时不尊重文件的顺序(到目前为止,似乎是这样)。

我已经广泛搜索了为什么会发生这种情况,但没有结果。我发现在光栅包中发生类似的事情的参考 https://gis.stackexchange.com/questions/317591/why-raster-layer-name-change-to-default-when-using-rastercalc-function 但没有关于这个特定问题的任何内容。提出一个 github 问题来询问这种行为值得吗?现在,栅格包似乎也发生了同样的行为(我实际上正在将一些代码从栅格迁移到 terra)。

感谢您的任何建议!干杯!

geospatial raster tiff terra
1个回答
0
投票

您有一个文件名向量(不是“列表”)并创建一个 SpatRaster。

ff <- list.files(pattern='.tif$', full.names=TRUE)
x <- terra::rast(ff)

如果您不喜欢

x
的图层名称,您可以更改它们。比如这样

names(x) <- gsub(".tif$", basename(ff))

这样,您就可以确定名称与图层正确匹配。

您将得到

bigfile[, varname]
,因为这是您正在使用的文件中指定的内容。如果你想修复这个问题,你需要询问文件的创建者。这显然是他们处理中的一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.