Skip to content

Commit 662cadc

Browse files
Merge pull request emf-creaf#16 from AntoineCabon/master
Download historical SMC data
2 parents 5c5dc3b + e151e45 commit 662cadc

3 files changed

Lines changed: 109 additions & 1 deletion

File tree

R/download_currentday.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ downloadSMCvarmetadata <- function(api){
120120
# save(SMCvarcode_df, file ="data/SMCvarcode_df.RData")
121121
# SMCstation_sp <- downloadSMChistoricalstationlist(api)
122122
# save(SMCstation_sp, file = "data/SMCstation_sp.RData")
123+
123124
# download the met data
124125
downloadSMCcurrentday <- function(api, daily_meteoland=TRUE, variable_code=NULL, station_id=NULL, date = Sys.Date(), verbose=TRUE){
125126

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,111 @@ downloadAEMEThistorical <- function(api, dates, station_id, export = FALSE, expo
220220

221221

222222
#### SMC
223-
# a implementar...
223+
# download the variables metadata
224+
# Note that they are different than that of current day
225+
downloadSMChistvarmetadata <- function(api){
226+
apidest <- "/variables/estadistics/diaris/metadades"
227+
data <- .get_data_smc(apidest,api)
228+
rownames(data) <- data$codi
229+
return(data)
230+
}
231+
# SMChistvarcodes <- downloadSMChistvarmetadata(api)
232+
# save(SMChistvarcodes, file= "data/temp.RData")
233+
234+
# download the met data
235+
downloadSMChistorical <- function(api, dates, station_id=NULL, variable_code=NULL,
236+
# export = FALSE, exportDir = getwd(),exportFormat = "meteoland/txt",metadatafile = "MP.txt",
237+
verbose=TRUE, daily_meteoland=TRUE){
238+
239+
load("data/temp.RData")
240+
if(daily_meteoland){
241+
variable_code <- c(1000, 1001, 1002, 1100, 1101, 1102, 1300, 1400, 1505,1511)
242+
}else if(is.null(variable_code)) stop("variable_code must be specified")
243+
244+
if(verbose)cat("Downloading daily data from all available stations\n")
245+
dates_round <- regmatches(dates,regexpr("[[:digit:]]{4}-[[:digit:]]{2}", dates))
246+
dates_round <- unique(dates_round)
247+
dates_split <- lapply(dates_round, function(x)strsplit(x, split = "-")[[1]])
248+
249+
# download variable per variable
250+
for(i in 1:length(variable_code)){
251+
252+
data_i <- data.frame()
253+
for(j in 1:length(dates_split)){
254+
apidest <- paste0("/variables/estadistics/diaris/", variable_code[i], "?any=", dates_split[[j]][1],
255+
"&mes=", dates_split[[j]][2])
256+
257+
data_list <- .get_data_smc(apidest, api)
258+
# data_list$variables <- sapply(data_list$variables, FUN = function(x)x$lectures)
259+
260+
data_j <- data.frame()
261+
for(k in 1:length(data_list$codiEstacio)){
262+
data_k <- data_list$valors[[k]][,c("data", "valor")]
263+
data_k$ID <- data_list$codiEstacio[[k]]
264+
# data_k$variable_code <- data_list$codiVariable[[k]]
265+
data_j <- rbind(data_j,data_k)
266+
}
267+
data_i <- rbind(data_i,data_j)
268+
}
269+
270+
colnames(data_i)[1:2] <- c("date", as.character(variable_code[i]))
271+
if(i == 1) {data <- data_i}else{data <- merge(data, data_i, all=T)}
272+
}
273+
274+
# data$date <- sub("T", " ", data$date)
275+
data$date <- sub("Z", "", data$date)
276+
data$date <- as.Date(data$date)
277+
data <- data[data$date %in% as.Date(dates),]
278+
279+
if(daily_meteoland){
280+
if(verbose)cat("\nDownloading station info\n")
281+
SMCstation_sp = downloadSMCstationlist(api)
282+
283+
if(verbose)cat("\nFormating data\n")
284+
data_df <- data.frame(ID = data$ID, name = SMCstation_sp@data[data$ID,"name"],
285+
long = SMCstation_sp@coords[data$ID,"long"],
286+
lat = SMCstation_sp@coords[data$ID,"lat"],
287+
elevation = SMCstation_sp@data[data$ID,"elevation"],
288+
date = data[ ,"date"],
289+
MeanTemperature = data[ ,"1000"],
290+
MinTemperature = data[ ,"1002"],
291+
MaxTemperature = data[ ,"1001"],
292+
Precipitation = data[ ,"1300"],
293+
WindSpeed = data[ ,"1505"],
294+
WindDirection = data[ ,"1511"],
295+
MeanRelativeHumidity = data[ ,"1100"],
296+
MinRelativeHumidity = data[ ,"1102"],
297+
MaxRelativeHumidity = data[ ,"1101"],
298+
Radiation = data[ ,"1400"])
299+
300+
data_df <- as.data.frame(lapply(data_df,function(x){
301+
x. <- x
302+
if(is.numeric(x.))x.[is.nan(x.)|is.infinite(x.)] <- NA
303+
return(x.)
304+
}))
305+
306+
data_sp <- SpatialPointsDataFrame(coords = data_df[,c("long", "lat")],
307+
data = data_df[,which(!colnames(data_df) %in% c("long", "lat", "name", "ID"))],
308+
proj4string = CRS("+proj=longlat"))
309+
310+
# vars <- colnames(data_df)
311+
# vars <- vars[!vars %in% c("ID","name","long","lat","elevation")]
312+
# ID <- unique(data_df$ID)
313+
# data_list <- list()
314+
# for(i in 1:length(ID)){
315+
# data_list[[i]] <- data_df[data$ID == ID[i],vars]
316+
# rownames(data_list[[i]]) <- data_list[[i]]$date
317+
# }
318+
# names(data_list) <- ID
319+
#
320+
# data_sp <- SpatialPointsMeteorology(SMCstation_sp[ID,],
321+
# data = data_list, dates = data_list[[1]]$date)
322+
323+
return(data_sp)
324+
}else{
325+
if(verbose)cat("\nNon-formated results are returned\n")
326+
colsel <- !colnames(data) %in% c("date", "ID")
327+
colnames(data)[colsel] <- SMChistvarcodes[colnames(data)[colsel], "nom"]
328+
return(data)
329+
}
330+
}

data/temp.RData

749 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)