Я занимаюсь разработкой небольшого приложения в R Shiny.Часть приложения должна будет запросить GBIF для загрузки данных о происхождении видов.Это возможно, используя rgbif
.Функция rgbif::occ_download()
загрузит данные, а rgbif::occ_download_meta()
проверит, выполнил ли GBIF ваш запрос.Например:
geometry <- "POLYGON((30.1 10.1,40 40,20 40,10 20,30.1 10.1))"
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
occ_download_meta(res)
<<gbif download metadata>>
Status: RUNNING
Format: SPECIES_LIST
Download key: 0004089-190415153152247
Created: 2019-04-25T09:18:20.952+0000
Modified: 2019-04-25T09:18:21.045+0000
Download link: http://api.gbif.org/v1/occurrence/download/request/0004089-190415153152247.zip
Total records: 0
Пока все хорошо.Однако следующая функция rgbif::occ_download_get()
не может загрузить данные для последующего анализа, пока не завершится occ_download_meta(res)
(когда Status = SUCCEEDED).
Как заставить сеанс ждать, пока загрузка из GBIF не будет завершеназавершена?Я не могу жестко запрограммировать время ожидания в сценарии, так как экстенты разных размеров будут обрабатывать GBIF больше или меньше.Кроме того, количество других активных пользователей, обращающихся к службе, также может изменить время ожидания.Поэтому мне нужен какой-то флаг, где Status == Успешно перед продолжением.
Я скопировал скелетный код с комментариями ниже.
library(rgbif)
geometry <- "POLYGON((30.1 10.1,40 40,20 40,10 20,30.1 10.1))" # Define boundary
res <- occ_download(paste0("geometry within ", geometry), type = "within", format = "SPECIES_LIST")
# WAIT HERE UNTIL Status == SUCCEEDED
occ_download_meta(res)
x <- occ_download_get(res, overwrite = TRUE) # Download data
data<-occ_download_import(x) # Import into R