-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFuncionesExtraccionDatosCercosporaV2022.2.r
135 lines (119 loc) · 6 KB
/
FuncionesExtraccionDatosCercosporaV2022.2.r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
extraeDatosClima <- function(estacion, origenDato, fechaInicio, fechaFin)
{
if(origenDato == "SWClima")
{
res <- get_SIAR_DatosCercospora(estacion, fechaInicio, fechaFin) # Usa la API interna del SIAR, no se puede exportar
if(res$success)
{
datosClimaticos <- res$datos
}else
{
stop(paste("Error al recoger datos de", origenDato, ", estacion:", estacion))
}
dataSamplingTime = 30 # dataSamplingTime = variable que indica con qué frecuencia se hacen medidass, en minutos, si la estacion mide en horarios= 60, quinceminutales = 15
unidadesHumectacion = "minutos" # unidadesHumectacion = la unidad en la que se mide la humectación, "minutos" o "porcentaje"
valorHumectacionMinimo = 5 # valorHumectacionMinimo = valor que se usará en los análisis del modelo para considerar que el registro es húmedo 1/6 del dataSamplingTime
nombreEstacionCalculada = get_SIAR_nombreEstacion(estacion) # Usa la API interna del SIAR, no se puede exportar
}else if(origenDato == "CESENS")
{
res <- get_CESENS_DatosEnfermedades(as.numeric(estacion), fechaInicio, fechaFin) #!!! OJO se da por hecho que el objeto tokenCESENS existe en memoria, tokenCESENS hay que generarlo usando USER/PASSWORD
if(res$success)
{
res <- res$datos
datosClimaticos <- data.frame(fecha = as.POSIXct(res$fecha),
temperatura = res$TAirMd,
humectacion = res$THumectacion,
HR = res$HRAirMd,
PAcum = res$PAcum, ######################## EDITABLE
stringsAsFactors = FALSE)
}else
{
stop(paste("Error al recoger datos de", origenDato, ", estacion:", estacion))
}
if(!exists("dataSamplingTime")){ #!!! ¿Qué sentido tiene esto?
dataSamplingTime = 60 # damos por hecho que el usuario no envía esta variable en ... entonces al llegar aquí consideramos este valor
}
unidadesHumectacion = "minutos"
valorHumectacionMinimo = 9
#Si se usan los datos quinceminutales de CESENS
#unidadesHumectacion = "porcentaje"
#valorHumectacionMinimo = 15
# Si se usan los datos diezminutales de CESENS
#unidadesHumectacion = "minutos"
#valorHumectacionMinimo = 10
# El PROBLEMA DE HACERLO DE LA SEGUNDA FORMA ES QUE HAY ESTACIONES DE CESENS CON SAMPLING_TIME VARIABLE Y, ADEMÁS NECESITARÍA CONFIGURAR MÁS LAS LLAMADAS A LAS FUNCIONES PARA CONFIGURAR ESTOS PARÁMETROS, get_SamplingTimeCESENS, getWetnessUnitCESENS
nombreEstacionCalculada = get_stationName_CESENS(estacion)
}else
{
res <- get_SIARNacional_DatosSemiHorarios(Estacion = estacion, FechaInicial = fechaInicio, FechaFinal = fechaFin)
if(is.null(res$datosBrutos$MensajeRespuesta))
{
res <- res$datos
datosClimaticos <- data.frame(fecha = as.POSIXct(res$Fecha),
temperatura = res$TempMedia,
humectacion = rep(0, nrow(res)),
HR = res$HumedadMedia,
PAcum = res$Precipitacion,
stringsAsFactors = FALSE)
}else
{
stop(paste("Error al recoger datos de", origenDato, ", estacion:", estacion))
}
datosClimaticos$temperatura <- sustituyeNAsXMedia(datosClimaticos$temperatura)
datosClimaticos$HR <- sustituyeNAsXMedia(datosClimaticos$HR)
datosClimaticos$PAcum <- sustituyeNAsXMedia(datosClimaticos$PAcum)
dataSamplingTime = 30 # dataSamplingTime = 30, en minutos, si la estacion mide en horarios= 60, quinceminutales = 15
unidadesHumectacion = NA #"minutos"
valorHumectacionMinimo = NA #5
nombreEstacionCalculada = get_SIARNacional_stationName(estacion)
}
return(toJSON(list(datosClimaticos = datosClimaticos,
dataSamplingTime = dataSamplingTime,
valorHumectacionMinimo = valorHumectacionMinimo,
nombreEstacionCalculada = nombreEstacionCalculada)))
}
# PEGAR ESTA FUNCION EN LA API DEL SIAR
get_SIAR_DatosCercospora <- function(estacion, fechaInicio, fechaFin, sensorHumect = "THumecta1")
{
if(estacion > 200) # Estaciones de la red general o geoestadísticas, completas
{
res <- extraeDatosSemiHorariosValidados(estacion,
fechaInicio,
fechaFin,
parametro = c("TAirMd", "HRAirMd", "THumecta1", "THumecta2", "Pluv"), # en versiones anteriores se enviaba la variable sensorHumect: parametro = c("TAirMd","HRAirMd", sensorHumect, "Pluv")
devolverFecha = TRUE)
res$datos$PAcum = res$datos$Pluv # PAcum es más fácil de entender que Pluv !!!
}else # Estaciones específicas de enfermedades, sólo unos pocos sensores, no tienen pluviómetro
{
res <- extraeDatosSemiHorariosValidados(estacion,
fechaInicio,
fechaFin,
parametro = c("TAirMd","HRAirMd", "THumecta1", "THumecta2"), # en versiones anteriores se enviaba la variable sensorHumect: parametro = c("TAirMd","HRAirMd", sensorHumect),
devolverFecha = TRUE)
if(nrow(res$datos) > 0)
{
res$datos$PAcum = NA
}else
{
res$datos$PAcum = numeric()
}
}
# Se eliminan valores con problemas, datos perdidos, series incompletas.
res$datos$TAirMd <- sustituyeNAsXMedia(res$datos$TAirMd, extremos = TRUE, valorPorDefecto = 0) #
res$datos$HRAirMd <- sustituyeNAsXMedia(res$datos$HRAirMd, extremos = TRUE, valorPorDefecto = 0)
res$datos$THumecta1 <- sustituyeNAsXMedia(res$datos$THumecta1, extremos = TRUE, valorPorDefecto = 0)
res$datos$THumecta2 <- sustituyeNAsXMedia(res$datos$THumecta2, extremos = TRUE, valorPorDefecto = 0)
return(list(datos = data.frame(fecha = as.POSIXct(res$fecha),
temperatura = res$datos$TAirMd,
humectacion = if(sensorHumect == "THumecta1") res$datos$THumecta1 else res$datos$THumecta2,
humectacion_sensor2 = if(sensorHumect == "THumecta1") res$datos$THumecta2 else res$datos$THumecta1,
HR = res$datos$HRAirMd,
PAcum = res$datos$PAcum, ######################## EDITABLE
stringsAsFactors = FALSE),
success = !res$noHayDatos))
}
# #Test
# res <- get_SIAR_DatosCercospora(501, Sys.Date()-1, Sys.time())
# str(res, 1)
# res <- get_SIAR_DatosCercospora(101, Sys.Date()-1, Sys.time())
# str(res, 1)