r - R:直接从 web url 读取 geotiff 数据(httr::GET 原始内容)
问题描述
我想从服务器提供的 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))
但是,我只能找到要从文件中读取的 raster 或 rgdal 函数。关于将此原始字符串转换为栅格的任何建议?
谢谢!
解决方案
GDAL 有一些很酷的虚拟文件系统驱动程序,其中之一/vsicurl
是
允许即时随机读取通过 HTTP/FTP Web 协议可用的文件,而无需事先下载整个文件。它需要针对 libcurl 构建 GDAL。
由于raster
包建立在rgdal
你可以简单地做到这一点:
library(raster)
r <- raster('/vsicurl/http://download.osgeo.org/geotiff/samples/gdal_eg/cea.tif')
plot(r)
推荐阅读
- c# - HttpWebRequest 远程服务器返回错误:(401) Unauthorized
- sql - 为什么我得到一个超出范围的值:下溢以及如何解决它?
- r - 有没有办法在 R 中的最后一个索引处重新启动 for 循环?
- database - Oracle - ORA-38101:合并时的 INSERT VALUES 子句中的列无效
- python - 如何调试由第三方应用程序启动的 python 脚本
- java - 为 Fragment 实现 RecyclerView 适配器的问题
- sql - 特殊情况需要计数记录
- python - 如何在 python 2.7 中从枚举中导入 auto?
- python - cv2.error: OpenCV(4.0.0): ...(-215:Assertion failed)... ONNXImporter::getLayerParams'
- python - 即使文本框超出范围,也强制执行 xlim 和 xbound