library(dplyr)
library(rvest)
dat <- read_html("https://opendap.cr.usgs.gov/opendap/hyrax/") |>
html_nodes("a")
dat2 <- data.frame(link = html_attr(dat, "href")) |>
mutate(
id = dirname(link),
link = paste0("https://opendap.cr.usgs.gov/opendap/hyrax/", gsub("contents.html", "", link))
# tmp = paste0(link, 'h00v08.ncml'
) |>
filter(!grepl("http|4913|opendap|PROTOTYPE", id)) |>
filter(id != ".") |>
filter(grepl("MOD", id))
dat3 <- list()
for (i in 1:nrow(dat2)) {
tmp <- tryCatch(
{
data.frame(link = html_attr(html_nodes(read_html(dat2$link[i]), "a"), "href"))
},
error = function(e) {
NULL
}
)
if (!is.null(tmp)) {
dat3[[i]] <- data.frame(link = html_attr(html_nodes(read_html(dat2$link[i]), "a"), "href")) |>
filter(grepl("datasetID", link)) |>
mutate(id = sub(".+datasetID=/(.+)", "\\1", link)) |>
tidyr::separate(id, into = c("id", "tile"), sep = "/") |>
mutate(tile = gsub(".ncml", "", tile), link = dat2$link[i])
} else {
dat3[[i]] <- NULL
}
message(i)
}
dat4 <- bind_rows(dat3) |>
group_by(id) |>
mutate(mosaic = n(), tiled = ifelse(mosaic > 1, "XY_modis", "")) |>
slice(1) |>
ungroup() |>
mutate(tmp = paste0(link, tile, ".ncml#fillmismatch"))
modis <- list()
for (i in 1:nrow(dat4)) {
modis[[i]] <- tryCatch(
{
nc <- RNetCDF::open.nc(dat4$tmp[i])
raw <- dap_xyzv(obj = nc, varmeta = TRUE)
raw$id <- dat4$id[i]
raw$tiled <- dat4$tiled[i]
merge(raw, data.frame(.resource_time(nc, raw$T_name[1]), id = dat4$id[i]), by = "id")
},
error = function(e) {
NULL
}
)
message(i)
}
modis_params <- bind_rows(modis) |>
mutate(
URL = paste0("https://opendap.cr.usgs.gov/opendap/hyrax/", id),
grid.id = "XY_modis"
)
## internal syntax capital RDS is for those files that have an XY tiling
# used when listing files :)
saveRDS(modis_params, "data-raw/modis_param.RDS")
tds <- read_tds(URL = "https://opendap.cr.usgs.gov/opendap/hyrax/MOD16A2.006/", "mod16") %>%
filter(grepl("ncml", link)) %>%
mutate(link = gsub("(ncml).*", "\\1", basename(link)), URL = NULL) %>%
group_by(link) %>%
slice(1) %>%
ungroup() %>%
mutate(URL = paste0("https://opendap.cr.usgs.gov/opendap/hyrax/MOD16A2.006/", link))
modis_grid <- lapply(1:nrow(tds), function(x) {
nc <- RNetCDF::open.nc(tds$URL[x])
raw <- .resource_grid(nc, X_name = "XDim", Y_name = "YDim")
raw$X_name <- "XDim"
raw$Y_name <- "YDim"
raw$tile <- gsub(".ncml", "", tds$link[x])
raw
})
modis_grids2 <- modis_grid %>%
bind_rows() |>
mutate(grid.id = "XY_modis")
saveRDS(modis_grids2, "data-raw/modis_grids.RDS")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.