从Web URL(httr :: GET原始内容)直接读取Geotiff数据

7
我想从服务器提供的GeoTIFF数据创建一个RasterLayer。我将使用httr :: GET调用查询此数据(数据是按需提供的,因此在应用程序中不会有以.tif结尾的url,而是查询url)。
将此调用的结果写入磁盘作为GeoTIFF文件后,从生成的GeoTIFF文件中轻松创建RasterLayer:
library(httr)
library(raster)

url <- 'http://download.osgeo.org/geotiff/samples/gdal_eg/cea.tif'

geotiff_file <- tempfile(fileext='.tif')
httr::GET(url,httr::write_disk(path=geotiff_file))
my_raster <- raster(geotiff_file)
my_raster

然而,我希望跳过将数据写入磁盘的步骤,直接从内存中的服务器响应创建光栅图像。

response <- httr::GET(url,httr::write_memory())
response

响应内容是原始字符串,我需要将其解释为geoTIFF数据。
str(httr::content(response))

然而,我只能找到读取文件的栅格或rgdal函数。有没有关于如何将原始字符串转换为栅格的建议?

谢谢!

1个回答

7

GDAL有一些很酷的虚拟文件系统驱动程序,其中之一是/vsicurl,它

允许通过HTTP/FTP Web协议随时读取文件,而无需事先下载整个文件。 它要求GDAL构建在libcurl上。

由于raster包基于rgdal构建,因此您可以简单地执行以下操作:

library(raster)

r <- raster('/vsicurl/http://download.osgeo.org/geotiff/samples/gdal_eg/cea.tif')

plot(r)

enter image description here


这在我的Windows上无法工作。可能是因为Windows的rgdal没有构建libcurl? - Robert Hijmans
@RobertHijmans 没有在Windows上测试过 - 在Linux上工作。可能是libcurl或gdal版本的问题。其他虚拟文件系统是否对您起作用? - Val
在Linux上可以工作,但在Windows上,raster()行会出现错误:Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", : 无法从此文件创建RasterLayer对象。(文件不存在) - WillemMaetens
我尝试使用磁盘上文件的路径,但是仍然出现相同的错误。不确定如何检查其他虚拟文件系统是否可用。 - WillemMaetens
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接