如何用R语言stars包获取栅格数据的属性值?
问题:使用stars包读取自定义TIFF数据集无法查看栅格属性值
我用R语言的stars包查看自带测试TIFF文件的栅格属性值完全正常,但对自己下载的公开TIFF数据集执行相同操作时,无法获取预期的属性值。
测试文件操作(成功)
# 加载包 library(stars) # 读取自带测试数据 dfrt <- read_stars(system.file('tif/L7_ETMs.tif', package = 'stars')) # 查看子集属性值 dfrt[[1]][1:5, 1:5, 1]
执行结果:
, , 1 [,1] [,2] [,3] [,4] [,5] [1,] 69 74 68 61 60 [2,] 69 68 64 61 63 [3,] 63 59 61 63 65 [4,] 60 58 60 60 58 [5,] 61 58 59 56 57
自定义数据集操作(失败)
下载并读取公开数据集的代码:
# 下载并解压文件 download.file(paste('https://dataverse.harvard.edu/file.xhtml?persistentId', 'doi:10.7910/DVN/YSWMDR/FUQ16M&version=1.1', sep = '='), 'BUPR.tar.gz') untar('BUPR.tar.gz', files = file.path('BUPR', 'BUPR_2010.tif')) # 读取文件(使用proxy参数) dfdp <- read_stars('BUPR_2010.tif', proxy = TRUE)
该数据集的对象信息:
stars_proxy object with 1 attribute in 1 file(s): $BUPR_2010.tif [1] "[...]/BUPR_2010.tif" dimension(s): from to offset delta refsys point values x/y x 1 18459 -2356399 250 USA_Contiguous_Albers_Equ... FALSE NULL [x] y 1 11615 3172999 -250 USA_Contiguous_Albers_Equ... FALSE NULL [y]
解决方案
问题核心是:自定义数据集读取时使用了proxy = TRUE,创建的是**stars_proxy延迟加载对象**,而测试文件是直接加载到内存的stars对象。stars_proxy不会立即把数据读入内存,仅保留文件引用,必须显式触发数据加载才能提取属性值。
方法1:直接读取到内存(适合小数据集)
去掉proxy = TRUE参数,直接将整个数据集加载到内存,之后即可用测试文件的方法查看属性值:
dfdp <- read_stars('BUPR_2010.tif') # 查看前5x5的属性值 dfdp[[1]][1:5, 1:5]
方法2:保留proxy,触发部分数据加载(适合大数据集)
如果数据集过大,不想一次性加载全部内存,可以通过子集提取操作触发局部数据加载:
# 方式1:用slice提取指定范围并加载 dfdp_sub <- dfdp %>% slice(x, 1:5) %>% slice(y, 1:5) # 查看提取的子集值 dfdp_sub[[1]] # 方式2:直接索引子集并强制加载 dfdp_sub <- dfdp[1:5, 1:5] dfdp_sub[[1]]
内容的提问来源于stack exchange,提问作者DOS
相关产品推荐
相关产品推荐

