Open simon-smart88 opened 5 months ago
@simon-smart88 Thanks for flagging the issue. Was testing now, and there seem to be some issues on the NASA LAADS archive. Will keep checking to see if the problem is with the code or with the archive that the code is trying to access — and at the very least aim to include some more helpful error messages when there seems to be issues with the LAADS archive.
I think the problem still exists. Any improvements? Below my codes:
roi_sf <- gadm(country = "GHA", level=1, path = tempdir())
r_20210205 <- bm_raster(roi_sf = roi_sf, product_id = "VNP46A2", date = "2021-02-05", bearer = bearer) r_20210205 NULL
I think no one is checking this page. Is there anyone who can help? Why does bm_raster create a null data set?
@firatgundem Sorry for the delay here! Does the dev
version work for you?
install.packages("devtools") devtools::install_github("worldbank/blackmarbler")
Sometimes there's issues as the NASA LAADs archive is down which will cause NULL
to be returned - I'm working on having the package return a message when this is the case, but one way to see if that's the source of the error is if you can manually download a file:
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/5000/VNP46A4/2012/001/
Another issues could be the bearer token expired, so could be worth trying to regenerate that.
Yes, I tried devtools as well but got the same thing. I have been trying to obtain this blackmarble dataset for more than 1 week and I could only get the null data. Could you please help me?
Ah thanks for this!
1/ Could be worth making sure all the packages it depends on are up to date?
readr, hdf5r, dplyr, purrr, lubridate, tidyr, terra, sf, exactextractr, stringr, httr
2/ Are you on a mac or pc?
I use pc and my packages are up-to-date. This is the latest error that I got:
black_marble_data = bm_raster(roi_sf = shapefile, # this specifies the region of interest
Error in downloading data; bearer token likely invalid. Try regenerating the bearer token; please see this link for instructions to obtain a bearer token: https://github.com/worldbank/blackmarbler?tab=readme-ov-file#bearer-token- Processing 1 nighttime light tiles Processing: VNP46A3.A2021305.h33v12.001.2021343154743.h5 |===============================================| 100% Warning: PROJ: proj_create_from_database: C:\Program Files\PostgreSQL\14\share\contrib\postgis-3.3\proj\proj.db contains DATABASE.LAYOUT.VERSION.MINOR = 0 whereas a number >= 2 is expected. It comes from another PROJ installation. (GDAL error 1) Processing 1 nighttime light tiles Processing: VNP46A3.A2021335.h33v12.001.2022008110827.h5 |===============================================| 100% Warning: PROJ: proj_create_from_database: C:\Program Files\PostgreSQL\14\share\contrib\postgis-3.3\proj\proj.db contains DATABASE.LAYOUT.VERSION.MINOR = 0 whereas a number >= 2 is expected. It comes from another PROJ installation. (GDAL error 1)
Storing the layer names from the original raster stack
original_layer_names = names(black_marble_data)
Imputing missing values in the raster data
imputed_data = approxNA(black_marble_data, method="linear", rule=2, f=0) #addressing the NA values by linear interpolation Error: unable to find an inherited method for function ‘approxNA’ for signature ‘x = "NULL"’
It is also interesting to see these. Although it says the bearer token is likely invalid, I have just renewed it. How can it be invalid?
I'm having the same problem too, I'll try to debug the code now.
Yeah, the problem with me was the bearer key. It changed, Although I did not request the change.
@marcoaurelioguerrap
Here's a function that will stop that being an issue. It fetches an existing token or creates a new one if none exist:
get_nasa_token <- function(username, password) {
token_url <- "https://urs.earthdata.nasa.gov/api/users/find_or_create_token"
req <- httr2::request(token_url)
response <- tryCatch(
req |>
httr2::req_auth_basic(username, password) |>
httr2::req_method("POST") |>
httr2::req_perform(),
httr2_http_401 = function(cnd){NULL}
)
if (httr2::resp_status(response) == 200) {
body <- response %>% httr2::resp_body_json()
token <- body$access_token
return(token)
} else {
return()
}
}
@simon-smart88 Thanks for writing that function. Would love to add to the package + note in the documentation if OK with you.
If you're willing to do a pull request that adds the function in here that'd be great - or I'm happy to just add myself if you prefer. Then I can test as well, add that to the documentation, then send the update to CRAN.
(I may also add an option in the bm_raster/bm_extract functions for a user to either include (1) bearer or (2) username/password).
Yes sure I will do - I think it probably needs a few tweaks to be robust to all eventualities though so will work on that and submit a PR.
Amazing, thanks @simon-smart88!
This has been the case for a month or so now. I've updated to the dev version but the problem persists. It seems unrelated to the
sf
object that I pass.Produces: