使用 s3read_using 函数获取的 s3 存储桶中的临时栅格
Working with Temp raster from s3 bucket acquired using s3read_using function
我正在使用 aws.s3 R 包从 s3 存储桶中提取 .tif
test_tif <- s3read_using(FUN = raster, object = "test_tif.tif", bucket = "bucketname")
这是将栅格放置在我的全局环境中:test_tif
当我去执行任何类型的基于光栅的操作时,我得到一个重复的错误
Error in .local(.Object, ...) :
没有进一步的错误代码或警告
查看光栅的结构,与从本地目录读取的相同 .tif 相比没有什么不同。
唯一的区别是一个保存为临时文件。
关于如何解决这个问题的任何想法。
使用 s3read_using 是必须的,因为它最终会被整合到一个闪亮的应用程序中。
谢谢。
看到的是 s3read_using
下载文件(使用 save_object
,以文件作为参数应用函数,然后删除文件。如果函数将数据读入内存。但是 raster
方法仅从文件中读取元数据;稍后根据需要读取实际值。
所以如果我这样做
r <- s3read_using(FUN = raster, object = "test.tif", bucket = "bucketname")
f <- filename(r)
#"C:\temp\RtmpcbsI2z\file9b846977650.tif"
file.exists(f)
#[1] FALSE
文件不见了,你不能用 RasterLayer 做任何事情r
。
解决方法是立即读取所有值。如果这不可能,您也可以将这些值乘以 1。这会产生类似的效果,除非文件非常大,在这种情况下,它会创建一个(更多)永久临时文件。
rr <- s3read_using(FUN = function(f) readAll(raster(f)), object = "test.tif", bucket = "bucketname")
# or
rr <- s3read_using(FUN = function(f) raster(f) * 1, object = "test.tif", bucket = "bucketname")
但在那种情况下,您不妨使用 save_object
函数 --- 这是您要避免的。
也许您可以改用 Cloud Optimized GeoTiff 并像这样访问它们 "vsicurl/https://mybucket/test.tif"
。您应该只能限制对您的域的访问。此外,terra
包可能会比 raster
.
提供更好的性能
我正在使用 aws.s3 R 包从 s3 存储桶中提取 .tif
test_tif <- s3read_using(FUN = raster, object = "test_tif.tif", bucket = "bucketname")
这是将栅格放置在我的全局环境中:test_tif
当我去执行任何类型的基于光栅的操作时,我得到一个重复的错误
Error in .local(.Object, ...) :
没有进一步的错误代码或警告
查看光栅的结构,与从本地目录读取的相同 .tif 相比没有什么不同。
唯一的区别是一个保存为临时文件。
关于如何解决这个问题的任何想法。
使用 s3read_using 是必须的,因为它最终会被整合到一个闪亮的应用程序中。
谢谢。
看到的是 s3read_using
下载文件(使用 save_object
,以文件作为参数应用函数,然后删除文件。如果函数将数据读入内存。但是 raster
方法仅从文件中读取元数据;稍后根据需要读取实际值。
所以如果我这样做
r <- s3read_using(FUN = raster, object = "test.tif", bucket = "bucketname")
f <- filename(r)
#"C:\temp\RtmpcbsI2z\file9b846977650.tif"
file.exists(f)
#[1] FALSE
文件不见了,你不能用 RasterLayer 做任何事情r
。
解决方法是立即读取所有值。如果这不可能,您也可以将这些值乘以 1。这会产生类似的效果,除非文件非常大,在这种情况下,它会创建一个(更多)永久临时文件。
rr <- s3read_using(FUN = function(f) readAll(raster(f)), object = "test.tif", bucket = "bucketname")
# or
rr <- s3read_using(FUN = function(f) raster(f) * 1, object = "test.tif", bucket = "bucketname")
但在那种情况下,您不妨使用 save_object
函数 --- 这是您要避免的。
也许您可以改用 Cloud Optimized GeoTiff 并像这样访问它们 "vsicurl/https://mybucket/test.tif"
。您应该只能限制对您的域的访问。此外,terra
包可能会比 raster
.