-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
108 lines (91 loc) · 3.81 KB
/
main.js
File metadata and controls
108 lines (91 loc) · 3.81 KB
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
const estados = {
running: "Ejecutándose",
stopped: "Detenido",
updating: "Actualizando",
};
const iconosModo = {
Pronóstico: "fas fa-cloud-sun",
Hindcast: "fas fa-cloud-moon",
};
const iconosCategoria = {
atmosfericos: "fas fa-cloud-sun",
oceanicos: "fas fa-water",
derrames: "fas fa-oil-can",
};
// Función para cargar los archivos JSON directamente desde GitHub
async function cargarArchivosJson() {
try {
const archivosJson = {};
// URL de los archivos JSON alojados en GitHub
const respuestaAtmosfericos = await fetch('https://raw.githubusercontent.com/tu-usuario/tu-repositorio/main/data/atmosfericos.json');
const respuestaOceanicos = await fetch('https://raw.githubusercontent.com/tu-usuario/tu-repositorio/main/data/oceanicos.json');
const respuestaDerrames = await fetch('https://raw.githubusercontent.com/tu-usuario/tu-repositorio/main/data/derrames.json');
// Esperar a que todas las respuestas se resuelvan
const datosAtmosfericos = await respuestaAtmosfericos.json();
const datosOceanicos = await respuestaOceanicos.json();
const datosDerrames = await respuestaDerrames.json();
archivosJson.atmosfericos = datosAtmosfericos;
archivosJson.oceanicos = datosOceanicos;
archivosJson.derrames = datosDerrames;
return archivosJson;
} catch (error) {
console.error("Error al cargar los archivos JSON:", error);
throw new Error("No se pudieron cargar los archivos JSON");
}
}
// Función para cargar los modelos en la interfaz
async function cargarModelos(categoria, contenedorId, archivosJson) {
try {
const modeloData = archivosJson[categoria]; // acceder a los modelos correspondientes
if (!modeloData) {
throw new Error(`No se encontraron datos para la categoría: ${categoria}`);
}
const contenedor = document.getElementById(contenedorId);
modeloData.forEach((modelo) => {
const card = document.createElement("div");
card.className = "col-md-4";
card.innerHTML = `
<div class="card p-3">
<h5 class="card-title">${modelo.nombre}</h5>
<p><i class="fas fa-clock"></i> Última actualización: ${modelo.actualizacion}</p>
<p><i class="fas fa-circle status-${modelo.estado}"></i> Estado: <span class="status-${modelo.estado}">${estados[modelo.estado]}</span></p>
<p><i class="${iconosCategoria[categoria]}"></i> Modo: <strong>${modelo.modo}</strong></p>
</div>
`;
contenedor.appendChild(card);
});
} catch (error) {
console.error(`Error cargando modelos de la categoría '${categoria}':`, error);
const contenedor = document.getElementById(contenedorId);
contenedor.innerHTML = `<div class="col-12 text-danger">Error al cargar datos de ${categoria}</div>`;
}
}
// Inicializar la página cargando los datos JSON y mostrando los modelos
async function inicializar() {
const archivosJson = await cargarArchivosJson();
await Promise.all([
cargarModelos("atmosfericos", "atmosfericos", archivosJson),
cargarModelos("oceanicos", "oceanicos", archivosJson),
cargarModelos("derrames", "derrames", archivosJson),
]);
// Mapa Leaflet
const map = L.map("map").setView([19.43, -99.13], 5);
L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
attribution: "© OpenStreetMap contributors",
}).addTo(map);
const zonas = [
{ name: "CROCO", coords: [18.5, -95], color: "blue" },
{ name: "ADCIRC", coords: [20.5, -97], color: "purple" },
{ name: "WW3", coords: [19.5, -94], color: "green" },
];
zonas.forEach((z) => {
L.circle(z.coords, {
color: z.color,
fillColor: z.color,
fillOpacity: 0.4,
radius: 200000,
}).addTo(map).bindPopup(z.name);
});
}
// Esperar a que el DOM se cargue completamente antes de inicializar
document.addEventListener("DOMContentLoaded", inicializar);