gpt4 book ai didi

R:使用连接和栅格包从 gz 文件读取 GeoTiff

转载 作者:行者123 更新时间:2023-12-02 02:10:49 25 4
gpt4 key购买 nike

我想从服务器读取 gzip 压缩的 GeoTIFF,而不下载它。我只是不想创建很多稍后必须删除的临时文件。

I see it is possible.csv.gz 文件。

通过下载,我通过以下方式进行:

library(raster)
link <- "ftp://ftp.glcf.umd.edu/glcf/SRTM/Degree_Tiles/n000/SRTM_ff03_n000e010
/SRTM_ff03_n000e010.tif.gz"

download.file(link, "test.tif.gz")
gunzip("test.tif.gz")
myras <- raster("test.tif")
plot(myras)

我可以直接从链接读取未压缩的文件:

link <- "http://download.osgeo.org/geotiff/samples/usgs/o41078a5.tif"
myras <- raster(link)
plot(myras)
myextent <- drawExtent()
plot(myras, ext=myextent)

在这里,我意识到不将其下载到本地存储可能不是一个好主意,因为我假设您随后使用 myras 执行的每个操作都需要数据再次通过互联网流动。但无论如何,只是为了概念证明我想这样做。在某些情况下,您只想显示 TIFF,而不对其进行任何进一步的计算,因此不想为其创建临时文件。

要读取(下载的)tiff.gz 文件而不先解压缩它,我尝试过:

> raster(gzfile("test.tif.gz"))
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘raster’ for signature ‘"gzfile"’

要通过连接直接从服务器读取 tiff.gz 文件,我尝试了以下操作:

> con <- gzcon(url("ftp://ftp.glcf.umd.edu/glcf/SRTM/Degree_Tiles/n000/SRTM_ff03_n000e010/SRTM_ff03_n000e010.tif.gz"))
> raster(con)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘raster’ for signature ‘"gzcon"’

> raw <- textConnection(readLines(con))
> raster(raw)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘raster’ for signature ‘"textConnection"’

> rawBin <- textConnection(readBin(con))
Error in readBin(con) : argument "what" is missing, with no default

> con <- gzfile("ftp://ftp.glcf.umd.edu/glcf/SRTM/Degree_Tiles/n000/SRTM_ff03_n000e010/SRTM_ff03_n000e010.tif.gz")
> myras <- raster(con)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘raster’ for signature ‘"gzfile"’

我找到了this Stackoverflow question关于如何读取压缩的二进制文件连接,但我不确定 GeoTIFF 是否是二进制的(是吗?)以及将哪些参数传递给 readBin() 函数。

我想随机尝试一些东西,因为我不太明白连接是如何工作的。谁能帮我解决这个问题吗?

最佳答案

我找到了一个解决方案,也许你也有。

函数readTIFF()来自tiff包可以从原始向量中读取 tiff 图像。因此,您可以使用 readBin() 将连接读入原始向量。 ,然后用 readTiff() 读取原始向量.

# create connection to a gz file
con <- gzfile("test.tif.gz", open = "rb")

# read data from this connection into a raw vector
myras.raw <- readBin(con, what = "raw", n = 1e10)

# read this raw vector
myras <- readTIFF(myras.raw)

我希望这能有所帮助:)

关于R:使用连接和栅格包从 gz 文件读取 GeoTiff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42088695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com