@@ -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(" \n Downloading station info\n " )
281+ SMCstation_sp = downloadSMCstationlist(api )
282+
283+ if (verbose )cat(" \n Formating 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(" \n Non-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+ }
0 commit comments