R: чтение геотифовых данных прямо из веб-адреса (httr :: GET raw content) - PullRequest
0 голосов
/ 05 сентября 2018

Я хотел бы создать RasterLayer из данных GeoTIFF, предоставленных сервером. Я запросю у сервера эти данные, используя вызов httr :: GET (данные предоставляются по запросу, поэтому в приложении не будет URL-адреса, оканчивающегося на .tif, а URL-адрес запроса).

После записи результата этого вызова на диск в виде файла GeoTIFF достаточно просто создать RasterLayer из полученного файла GeoTIFF на диске:

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 Ответ

0 голосов
/ 07 сентября 2018

GDAL имеет какой-нибудь крутой драйвер виртуальной файловой системы , одним из которых является /vsicurl, что

позволяет выполнять произвольное чтение файлов на лету через веб-протоколы HTTP / FTP без предварительной загрузки всего файла. Требуется сборка 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

...