{"id":9435,"date":"2025-06-17T12:13:18","date_gmt":"2025-06-17T18:13:18","guid":{"rendered":"https:\/\/roque.tecnm.mx\/?page_id=9435"},"modified":"2026-02-23T03:00:53","modified_gmt":"2026-02-23T09:00:53","slug":"estacion-climatologica-roque","status":"publish","type":"page","link":"https:\/\/roque.tecnm.mx\/?page_id=9435","title":{"rendered":"Estaci\u00f3n Climatol\u00f3gica Roque"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00bb1&#8243; _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_row _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_code _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb width=\u00bb100%\u00bb module_alignment=\u00bbleft\u00bb overflow-x=\u00bbauto\u00bb custom_margin=\u00bb0px|0px|0px||true|false\u00bb custom_padding=\u00bb10px||10px||true|false\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb sticky_enabled=\u00bb0&#8243;]<\/p>\n<div class=\"meteo-container\" style=\"font-family: Arial, sans-serif; max-width: 1100px; margin: auto; padding: 10px;\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<header style=\"display: flex; align-items: center; justify-content: center; gap: 20px; margin-bottom: 30px; border-bottom: 3px solid #1b396a; padding-bottom: 20px;\"><!-- [et_pb_line_break_holder] -->        <img decoding=\"async\" src=\"https:\/\/roque.tecnm.mx\/wp-content\/uploads\/2024\/09\/TecNM_logo.png\" alt=\"Logo TecNM\" style=\"height: 60px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"text-align: left;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 id=\"status-lectura\" style=\"color: #1b396a; margin: 0; font-size: 34px; font-weight: 700;\">Estaci\u00f3n Climatol\u00f3gica<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee style=\"margin: 0; color: #666; font-size: 34px;\">TecNM &#8211; Campus Roque<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/header>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<section style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin-bottom: 20px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"background: #1f4e79; color: white; padding: 15px; border-radius: 8px; text-align: center;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 style=\"margin:0; font-size:18px; opacity:0.8; color:white;\">\u00daltima Fecha<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee id=\"card-fecha\" style=\"margin:5px 0 0; font-size:18px; font-weight:bold;\">&#8211;<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"background: #d9534f; color: white; padding: 15px; border-radius: 8px; text-align: center;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 style=\"margin:0; font-size:18px; opacity:0.8; color:white;\">TMAX<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee id=\"card-tmax\" style=\"margin:5px 0 0; font-size:22px; font-weight:bold;\">&#8211;<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"background: #0275d8; color: white; padding: 15px; border-radius: 8px; text-align: center;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 style=\"margin:0; font-size:18px; opacity:0.8; color:white; \">TMIN<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee id=\"card-tmin\" style=\"margin:5px 0 0; font-size:22px; font-weight:bold;\">&#8211;<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style=\"background: #5bc0de; color: white; padding: 15px; border-radius: 8px; text-align: center;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 style=\"margin:0; font-size:18px; opacity:0.8; color:white; \">Precipitaci\u00f3n<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee id=\"card-precip\" style=\"margin:5px 0 0; font-size:22px; font-weight:bold;\">&#8211;<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/section>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div style=\"overflow-x: auto; background: white; border-radius: 8px; border: 1px solid #ddd; margin-bottom: 20px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<table style=\"width: 100%; border-collapse: collapse;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<thead><!-- [et_pb_line_break_holder] -->                <\/p>\n<tr style=\"background: #1f4e79; color: white; font-size: 14px;\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<th style=\"padding: 12px; border: 1px solid #ddd; color:white; \">Fecha<\/th>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<th style=\"padding: 12px; border: 1px solid #ddd; color:white; \">Precip. (mm)<\/th>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<th style=\"padding: 12px; border: 1px solid #ddd; color:white; \">Evap. (mm)<\/th>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<th style=\"padding: 12px; border: 1px solid #ddd; color:white; \">TMAX (\u00b0C)<\/th>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<th style=\"padding: 12px; border: 1px solid #ddd; color:white; \">TMIN (\u00b0C)<\/th>\n<p><!-- [et_pb_line_break_holder] -->                <\/tr>\n<p><!-- [et_pb_line_break_holder] -->            <\/thead>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<tbody id=\"cuerpoTabla\" style=\"text-align: center; font-size: 14px;\"><\/tbody>\n<p><!-- [et_pb_line_break_holder] -->        <\/table>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div style=\"text-align: center; margin-bottom: 30px; display: flex; justify-content: center; align-items: center; gap: 10px; flex-wrap: wrap;\"><!-- [et_pb_line_break_holder] -->        <button onclick=\"cambiarP(-1)\" style=\"padding: 10px 20px; cursor: pointer; background: #eee; border: 1px solid #ccc; border-radius: 5px;\">Anterior<\/button><!-- [et_pb_line_break_holder] -->        <span id=\"txtPag\" style=\"font-weight: bold; min-width: 100px;\">Cargando&#8230;<\/span><!-- [et_pb_line_break_holder] -->        <button onclick=\"cambiarP(1)\" style=\"padding: 10px 20px; cursor: pointer; background: #eee; border: 1px solid #ccc; border-radius: 5px;\">Siguiente<\/button><!-- [et_pb_line_break_holder] -->        <button onclick=\"bajarExcel()\" style=\"padding: 10px 20px; cursor: pointer; background: #28a745; color: white; border: none; border-radius: 5px; font-weight: bold;\">\ud83d\udce5 Exportar a Excel<\/button><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div style=\"background: white; padding: 20px; border-radius: 8px; border: 1px solid #eee; margin-bottom: 20px; box-shadow: 0 2px 5px rgba(0,0,0,0.05);\"><!-- [et_pb_line_break_holder] -->        <canvas id=\"chartTemp\" height=\"100\"><\/canvas><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div style=\"background: white; padding: 20px; border-radius: 8px; border: 1px solid #eee; box-shadow: 0 2px 5px rgba(0,0,0,0.05);\"><!-- [et_pb_line_break_holder] -->        <canvas id=\"chartHidro\" height=\"100\"><\/canvas><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/xlsx@0.18.5\/dist\/xlsx.full.min.js\"><\/script><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->\/\/ El enlace se mantiene, pero le a\u00f1adimos un truco al final para evitar la cach\u00e9<!-- [et_pb_line_break_holder] -->const URL_BASE = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vQ31NDLYz24IwPjQzuDCfnrNGg78atioLNqLB9voMQAScDETfpFaUZg85kfPZ7N5fW52sPMEV7aE3dw\/pub?gid=23775817&single=true&output=csv\";<!-- [et_pb_line_break_holder] -->const URL_FINAL = URL_BASE + \"&cache_burst=\" + new Date().getTime();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->let misDatos = [];<!-- [et_pb_line_break_holder] -->let pActual = 1;<!-- [et_pb_line_break_holder] -->const pSize = 10;<!-- [et_pb_line_break_holder] -->let cT, cH;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->async function cargar() {<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->        const r = await fetch(URL_FINAL);<!-- [et_pb_line_break_holder] -->        if (!r.ok) throw new Error(\"Google no responde\");<!-- [et_pb_line_break_holder] -->        const texto = await r.text();<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        const filas = texto.split(\/\\r?\\n\/);<!-- [et_pb_line_break_holder] -->        \/\/ Detector autom\u00e1tico de separador (coma o punto y coma)<!-- [et_pb_line_break_holder] -->        const sep = filas[0].includes(';') ? ';' : ',';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        misDatos = filas.slice(1)<!-- [et_pb_line_break_holder] -->            .map(l => l.split(sep).map(celda => celda.replace(\/\"\/g, '').trim()))<!-- [et_pb_line_break_holder] -->            .filter(f => f.length >= 5 && f[0] !== \"\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if(misDatos.length === 0) throw new Error(\"Archivo vac\u00edo\");<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        dibujar(1);<!-- [et_pb_line_break_holder] -->    } catch (e) {<!-- [et_pb_line_break_holder] -->        console.error(e);<!-- [et_pb_line_break_holder] -->        document.getElementById('status-lectura').innerHTML = \"<span style='color:red'>Error: No se pudieron obtener los datos. Revisa la publicaci\u00f3n en Google Sheets.<\/span>\";<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function dibujar(p) {<!-- [et_pb_line_break_holder] -->    pActual = p;<!-- [et_pb_line_break_holder] -->    const inicio = (p - 1) * pSize;<!-- [et_pb_line_break_holder] -->    const bloque = misDatos.slice(inicio, inicio + pSize);<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    \/\/ Tabla<!-- [et_pb_line_break_holder] -->    document.getElementById(\"cuerpoTabla\").innerHTML = bloque.map((f, index) => `<!-- [et_pb_line_break_holder] -->    <\/p>\n<tr style=\"border-bottom: 1px solid #eee; background-color: ${index % 2 === 0 ? '#ffffff' : '#f9f9f9'};\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<td style=\"padding:10px; font-weight:bold;\">${f[0]}<\/td>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<td>${f[1]}<\/td>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<td>${f[2]}<\/td>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<td style=\"color:#d9534f; font-weight:bold;\">${f[3]}<\/td>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<td style=\"color:#0275d8; font-weight:bold;\">${f[4]}<\/td>\n<p><!-- [et_pb_line_break_holder] -->    <\/tr>\n<p>`).join('');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Tarjetas (Dato m\u00e1s actual es la fila 0)<!-- [et_pb_line_break_holder] -->    const top = misDatos[0];<!-- [et_pb_line_break_holder] -->    document.getElementById(\"card-fecha\").textContent = top[0];<!-- [et_pb_line_break_holder] -->    document.getElementById(\"card-precip\").textContent = top[1] + \" mm\";<!-- [et_pb_line_break_holder] -->    document.getElementById(\"card-tmax\").textContent = top[3] + \" \u00b0C\";<!-- [et_pb_line_break_holder] -->    document.getElementById(\"card-tmin\").textContent = top[4] + \" \u00b0C\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    document.getElementById(\"txtPag\").textContent = `P\u00e1gina ${p} de ${Math.ceil(misDatos.length\/pSize)}`;<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    actualizarGraficas(bloque);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function actualizarGraficas(bloque) {<!-- [et_pb_line_break_holder] -->    const labels = bloque.map(f => f[0]).reverse();<!-- [et_pb_line_break_holder] -->    const tmax = bloque.map(f => parseFloat(f[3].replace(',', '.')) || 0).reverse();<!-- [et_pb_line_break_holder] -->    const tmin = bloque.map(f => parseFloat(f[4].replace(',', '.')) || 0).reverse();<!-- [et_pb_line_break_holder] -->    const precip = bloque.map(f => parseFloat(f[1].replace(',', '.')) || 0).reverse();<!-- [et_pb_line_break_holder] -->    const evap = bloque.map(f => parseFloat(f[2].replace(',', '.')) || 0).reverse();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (cT) cT.destroy();<!-- [et_pb_line_break_holder] -->    cT = new Chart(document.getElementById('chartTemp'), {<!-- [et_pb_line_break_holder] -->        type: 'line',<!-- [et_pb_line_break_holder] -->        data: {<!-- [et_pb_line_break_holder] -->            labels: labels,<!-- [et_pb_line_break_holder] -->            datasets: [<!-- [et_pb_line_break_holder] -->                { label: 'TMAX (\u00b0C)', data: tmax, borderColor: '#d9534f', tension: 0.3 },<!-- [et_pb_line_break_holder] -->                { label: 'TMIN (\u00b0C)', data: tmin, borderColor: '#0275d8', tension: 0.3 }<!-- [et_pb_line_break_holder] -->            ]<!-- [et_pb_line_break_holder] -->        },<!-- [et_pb_line_break_holder] -->        options: { responsive: true, plugins: { title: { display: true, text: 'Temperaturas' } } }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (cH) cH.destroy();<!-- [et_pb_line_break_holder] -->    cH = new Chart(document.getElementById('chartHidro'), {<!-- [et_pb_line_break_holder] -->        type: 'bar',<!-- [et_pb_line_break_holder] -->        data: {<!-- [et_pb_line_break_holder] -->            labels: labels,<!-- [et_pb_line_break_holder] -->            datasets: [<!-- [et_pb_line_break_holder] -->                { label: 'Precipitaci\u00f3n (mm)', data: precip, backgroundColor: '#5bc0de' },<!-- [et_pb_line_break_holder] -->                { label: 'Evaporaci\u00f3n (mm)', data: evap, backgroundColor: '#f0ad4e' }<!-- [et_pb_line_break_holder] -->            ]<!-- [et_pb_line_break_holder] -->        },<!-- [et_pb_line_break_holder] -->        options: { responsive: true, plugins: { title: { display: true, text: 'Precipitaci\u00f3n vs Evaporaci\u00f3n' } } }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->window.cambiarP = (d) => {<!-- [et_pb_line_break_holder] -->    let n = pActual + d;<!-- [et_pb_line_break_holder] -->    if (n > 0 && n <= Math.ceil(misDatos.length\/pSize)) dibujar(n);<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->window.bajarExcel = () => {<!-- [et_pb_line_break_holder] -->    const headers = [[\"Fecha\", \"Precipitaci\u00f3n (mm)\", \"Evaporaci\u00f3n (mm)\", \"TMAX (\u00b0C)\", \"TMIN (\u00b0C)\"]];<!-- [et_pb_line_break_holder] -->    const ws = XLSX.utils.aoa_to_sheet(headers.concat(misDatos));<!-- [et_pb_line_break_holder] -->    const wb = XLSX.utils.book_new();<!-- [et_pb_line_break_holder] -->    XLSX.utils.book_append_sheet(wb, ws, \"Clima\");<!-- [et_pb_line_break_holder] -->    XLSX.writeFile(wb, \"Reporte_Meteo.xlsx\");<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->document.addEventListener(\"DOMContentLoaded\", cargar);<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb][et_pb_column _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb type=\u00bb4_4&#8243;][et_pb_code _builder_version=\u00bb4.27.0&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; sticky_enabled=\u00bb0&#8243;]<a class=\"weatherwidget-io\" href=\"https:\/\/forecast7.com\/es\/20d53n100d81\/celaya\/\" data-label_1=\"CELAYA\" data-theme=\"original\" >CELAYA<\/a><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='https:\/\/weatherwidget.io\/js\/widget.min.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','weatherwidget-io-js');<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-9435","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=\/wp\/v2\/pages\/9435"}],"collection":[{"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9435"}],"version-history":[{"count":73,"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=\/wp\/v2\/pages\/9435\/revisions"}],"predecessor-version":[{"id":10752,"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=\/wp\/v2\/pages\/9435\/revisions\/10752"}],"wp:attachment":[{"href":"https:\/\/roque.tecnm.mx\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}