diff --git a/src/src/components/stationCard/StationCard.js b/src/src/components/stationCard/StationCard.js index 57c3c88..88ae285 100644 --- a/src/src/components/stationCard/StationCard.js +++ b/src/src/components/stationCard/StationCard.js @@ -78,6 +78,12 @@ function StationCard({ loading, msgError, station }) {

{station.name}

+ + + {station.municipality}, {station.state} + +
+
{lastDataStation?.climaticData ? lastDataStation.climaticData @@ -92,8 +98,6 @@ function StationCard({ loading, msgError, station }) { : "N/A"}{" "} °C -
-
{renderClimaticData( "prec", , @@ -116,10 +120,6 @@ function StationCard({ loading, msgError, station }) { {lastDataStation?.date ?? "N/A"}
- - - {station.municipality}, {station.state} -
diff --git a/src/src/components/weatherChart/WeatherChart.js b/src/src/components/weatherChart/WeatherChart.js index c605b00..bb1ffd0 100644 --- a/src/src/components/weatherChart/WeatherChart.js +++ b/src/src/components/weatherChart/WeatherChart.js @@ -33,14 +33,92 @@ const WeatherChart = ({ isChartLoading, startAtZero, }) => { - const adjustColorOpacity = (color, opacity) => { - const rgba = color.replace( - /rgba?\((\d+), ?(\d+), ?(\d+),? ?([\d.]*)\)/, - (match, r, g, b, a) => { - return `rgba(${r},${g},${b},${opacity})`; + const adjustColor = ( + color, + opacity = 1, + brightnessFactor = 1.2, + hueShift = 10 + ) => { + // Convertir RGB a HSL + const rgbToHsl = (r, g, b) => { + r /= 255; + g /= 255; + b /= 255; + + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + let h, + s, + l = (max + min) / 2; + + if (max === min) { + h = s = 0; // gris + } else { + const d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h *= 60; + } + + return [h, s, l]; + }; + + // Convertir HSL de nuevo a RGB + const hslToRgb = (h, s, l) => { + let r, g, b; + + const hueToRgb = (p, q, t) => { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 3) return q; + if (t < 1 / 2) return p + (q - p) * (2 / 3 - t) * 6; + return p; + }; + + if (s === 0) { + r = g = b = l; // gris + } else { + const q = l < 0.5 ? l * (1 + s) : l + s - l * s; + const p = 2 * l - q; + r = hueToRgb(p, q, h / 360 + 1 / 3); + g = hueToRgb(p, q, h / 360); + b = hueToRgb(p, q, h / 360 - 1 / 3); } - ); - return rgba; + + return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; + }; + + // Extraer los valores RGB del color + const rgbaMatch = color.match(/rgba?\((\d+), ?(\d+), ?(\d+),? ?([\d.]*)\)/); + if (!rgbaMatch) { + throw new Error("Formato de color no válido"); + } + + const [r, g, b] = rgbaMatch.slice(1, 4).map(Number); + + // Convertir a HSL + let [h, s, l] = rgbToHsl(r, g, b); + + // Ajustar el brillo (luminance) y el hue (matiz) + l = Math.min(1, l * brightnessFactor); // Aumentar el brillo + h = (h + hueShift) % 360; // Cambiar el hue + + // Convertir de nuevo a RGB + const [newR, newG, newB] = hslToRgb(h, s, l); + + // Retornar el color con la nueva opacidad + return `rgba(${newR},${newG},${newB},${opacity})`; }; const maxItem = useMemo( @@ -99,6 +177,7 @@ const WeatherChart = ({ data: data.map((item) => item.value), fill: false, borderColor: color, + backgroundColor: color, tension: 0.1, }, ...(dataSpacial.length > 0 @@ -107,7 +186,8 @@ const WeatherChart = ({ label: `Datos satelitales`, data: dataSpacial.map((item) => item.value), fill: false, - borderColor: adjustColorOpacity(color, 0.5), + borderColor: adjustColor(color, 0.5, 1, 15), + backgroundColor: adjustColor(color, 0.5, 1, 15), tension: 0.1, }, ] @@ -189,23 +269,21 @@ const WeatherChart = ({ ) : ( <>

- La gráfica muestra la evolución de {title.toLowerCase()}{" "} - registrada en la estación meteorológica durante los{" "} - últimos {data.length} días. En ella se destaca que el - día con la {title.toLowerCase()} más alta fue el{" "} + La gráfica muestra los datos de {title.toLowerCase()}{" "} + registrada en la estación meteorológica desde{" "} + {data[0].label} hasta{" "} + {data[data.length - 1].label}. En ella se destaca que + el día con la {title.toLowerCase()} más alta fue el{" "} {formatLabel(maxItem.label)}, alcanzando un máximo de{" "} {maxItem.value.toFixed(2)} {unit} , mientras que el día con la {title.toLowerCase()} más baja - fue el {formatLabel(minItem.label)}, con una{" "} - {title.toLowerCase()} de{" "} + fue el {formatLabel(minItem.label)}, con una mínima de{" "} {minItem.value.toFixed(2)} {unit} - . Esta visualización permite analizar las variaciones diarias - de {title.toLowerCase()} y ofrece una referencia clara para - identificar patrones climáticos recientes en la región. + .

{

{currentStation?.name}

+

+ Ubicacion:{" "} + {currentStation?.latitude + + ", " + + currentStation?.longitude} +

Fuente: WeatherLink

@@ -425,13 +431,13 @@ const Dashboard = () => { La estación meteorológica {currentStation?.name} está ubicada en{" "} - {currentStation?.latitude + ", " + currentStation?.longitude}.{" "} + {currentStation?.municipality + ", " + currentStation?.state}.{" "} - Cuenta con datos observados desde el{" "} - {startDataDate || "N/A"} hasta el{" "} + Cuenta con datos observados desde{" "} + {startDataDate || "N/A"} hasta{" "} {endDataDate || "N/A"}, se puede comparar con datos - espaciales como AgERA-5 y CHIRPS que tiene datos desde el{" "} - {startDataSpacialDate || "N/A"} hasta el{" "} + espaciales como AgERA-5 y CHIRPS que tiene datos desde{" "} + {startDataSpacialDate || "N/A"} hasta{" "} {endDataSpacialDate || "N/A"}.

{currentStation?.latitude && currentStation?.longitude ? ( diff --git a/src/src/pages/home/Home.js b/src/src/pages/home/Home.js index 740d413..31d55e7 100644 --- a/src/src/pages/home/Home.js +++ b/src/src/pages/home/Home.js @@ -93,17 +93,16 @@ const Home = () => {

Bienvenido a AClimate monitoring

- Explora y compara los datos de las estaciones en tiempo real con - otras bases de datos confiables. Simplifica la toma de - decisiones con información precisa y personalizada al alcance de - tu mano. + Explora, monitorea y compara los datos de las estaciones + climátologicas con bases de datos satelitales. Informate sobre + como ha sido el clima en las regiones.

- Revisa los datos + Explora el clima