feat: demo visualización imágenes Wikipedia + gitignore wiki/
- demo_wiki_images.html: grafo 3D con las 15 imágenes de Wikipedia sobre cambio climático como nodos sprite, panel de detalle al click - images/wiki/.gitignore: excluye imágenes binarias del repo Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
0975f44a0e
commit
b80c28c4f2
2 changed files with 387 additions and 0 deletions
385
VISUALIZACION/public/demos/demo_wiki_images.html
Normal file
385
VISUALIZACION/public/demos/demo_wiki_images.html
Normal file
|
|
@ -0,0 +1,385 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>FLUJOS — Demo: Wikipedia Images</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap" rel="stylesheet">
|
||||
|
||||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
"three": "https://esm.sh/three@0.168",
|
||||
"three/": "https://esm.sh/three@0.168/",
|
||||
"3d-force-graph": "https://esm.sh/3d-force-graph@1.73?external=three"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Fira Code', monospace; }
|
||||
body { background: #000; color: #39ff14; overflow: hidden; }
|
||||
#graph { position: fixed; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
#header {
|
||||
position: fixed; top: 0; left: 0; right: 0; z-index: 10;
|
||||
padding: 10px 20px;
|
||||
background: linear-gradient(180deg, rgba(0,0,0,0.95) 0%, transparent 100%);
|
||||
display: flex; align-items: center; gap: 14px;
|
||||
}
|
||||
#header h1 { font-size: 1em; color: #39ff14; letter-spacing: 4px; text-shadow: 0 0 10px #39ff14; }
|
||||
.tag { font-size: 0.6em; padding: 3px 8px; border: 1px solid #ff4500; color: #ff4500; letter-spacing: 2px; }
|
||||
.tag2 { font-size: 0.6em; padding: 3px 8px; border: 1px solid #555; color: #555; letter-spacing: 2px; }
|
||||
|
||||
/* Panel de detalle */
|
||||
#detail {
|
||||
position: fixed; bottom: 0; right: 0; z-index: 10;
|
||||
width: 340px;
|
||||
background: rgba(0,0,0,0.95);
|
||||
border-left: 1px solid #222;
|
||||
border-top: 1px solid #222;
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
max-height: 60vh;
|
||||
}
|
||||
#detail img {
|
||||
width: 100%; max-height: 200px;
|
||||
object-fit: cover; display: block;
|
||||
}
|
||||
#detail .detail-body { padding: 14px 16px; overflow-y: auto; }
|
||||
#detail h3 { font-size: 0.8em; color: #fff; margin-bottom: 6px; line-height: 1.4; }
|
||||
#detail .badge {
|
||||
display: inline-block; font-size: 0.6em; padding: 2px 8px;
|
||||
border: 1px solid #ff4500; color: #ff4500; letter-spacing: 2px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#detail p { font-size: 0.7em; color: #777; line-height: 1.6; margin-bottom: 8px; }
|
||||
#detail .meta { font-size: 0.62em; color: #444; line-height: 1.8; }
|
||||
#detail .meta span { color: #666; }
|
||||
#detail .close {
|
||||
position: absolute; top: 8px; right: 10px;
|
||||
background: rgba(0,0,0,0.7); border: none;
|
||||
color: #555; font-family: inherit; font-size: 0.8em;
|
||||
cursor: pointer; padding: 2px 6px; z-index: 1;
|
||||
}
|
||||
#detail .close:hover { color: #fff; }
|
||||
|
||||
/* Stats */
|
||||
#stats {
|
||||
position: fixed; bottom: 20px; left: 20px; z-index: 10;
|
||||
font-size: 0.62em; color: #333; line-height: 2;
|
||||
}
|
||||
#stats span { color: #555; }
|
||||
|
||||
/* Tooltip custom */
|
||||
.node-tooltip {
|
||||
position: fixed; z-index: 20; pointer-events: none;
|
||||
background: rgba(0,0,0,0.9); border: 1px solid #333;
|
||||
padding: 6px 10px; font-size: 0.7em; color: #fff;
|
||||
max-width: 180px; display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="graph"></div>
|
||||
|
||||
<div id="header">
|
||||
<h1>FLUJOS</h1>
|
||||
<span class="tag">CAMBIO CLIMÁTICO</span>
|
||||
<span class="tag2">Wikipedia Images · 15 nodos</span>
|
||||
</div>
|
||||
|
||||
<div id="detail">
|
||||
<button class="close" onclick="document.getElementById('detail').style.display='none'">✕</button>
|
||||
<img id="d-img" src="" alt="">
|
||||
<div class="detail-body">
|
||||
<h3 id="d-title"></h3>
|
||||
<span class="badge">CAMBIO CLIMÁTICO</span>
|
||||
<p id="d-desc"></p>
|
||||
<div class="meta">
|
||||
<div>ARTÍCULO <span id="d-articulo"></span></div>
|
||||
<div>LICENCIA <span id="d-licencia"></span></div>
|
||||
<div>AUTOR <span id="d-autor"></span></div>
|
||||
<div>TAMAÑO <span id="d-size"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="stats">
|
||||
<div>NODOS <span>15</span></div>
|
||||
<div>TEMA <span>cambio climático</span></div>
|
||||
<div>FUENTE <span>Wikipedia / Wikimedia Commons</span></div>
|
||||
</div>
|
||||
|
||||
<div id="node-tooltip" class="node-tooltip"></div>
|
||||
|
||||
<script type="module">
|
||||
import ForceGraph3D from '3d-force-graph';
|
||||
import * as THREE from 'three';
|
||||
|
||||
// ── Datos: imágenes de Wikipedia sobre cambio climático ─────────────────────
|
||||
const WIKI_NODES = [
|
||||
{
|
||||
id: "cambio_climático_000",
|
||||
archivo: "cambio_climático_000.jpg",
|
||||
img: "/images/wiki/cambio_climático_000.jpg",
|
||||
titulo: "Vista aérea del hielo en Nunavut",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Vista aérea del borde del hielo en Nunavut, Canadá. Representa el deshielo polar como consecuencia del cambio climático.",
|
||||
autor: "Doc Searls",
|
||||
licencia: "CC BY-SA 2.0",
|
||||
width: 3504, height: 2336,
|
||||
grupo: "fotografia",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_001",
|
||||
archivo: "cambio_climático_001.png",
|
||||
img: "/images/wiki/cambio_climático_001.png",
|
||||
titulo: "Variaciones históricas de CO₂",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Historia y futuro de la concentración de CO₂ en la atmósfera. Escala logarítmica mostrando los últimos 100 millones de años.",
|
||||
autor: "Hannes Grobe",
|
||||
licencia: "CC BY-SA 2.5",
|
||||
width: 1155, height: 806,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_002",
|
||||
archivo: "cambio_climático_002.png",
|
||||
img: "/images/wiki/cambio_climático_002.png",
|
||||
titulo: "Factores del cambio climático",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Esquema ilustrativo de los principales factores que afectan al cambio climático.",
|
||||
autor: "Medium69 / Ortisa",
|
||||
licencia: "CC BY-SA 4.0",
|
||||
width: 600, height: 582,
|
||||
grupo: "esquema",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_003",
|
||||
archivo: "cambio_climático_003.jpg",
|
||||
img: "/images/wiki/cambio_climático_003.jpg",
|
||||
titulo: "Consenso científico sobre el clima",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Gráfico de Cook et al. (2016) ilustrando los resultados de siete estudios de consenso climático.",
|
||||
autor: "Skeptical Science",
|
||||
licencia: "CC BY-SA 3.0",
|
||||
width: 1920, height: 1080,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_004",
|
||||
archivo: "cambio_climático_004.png",
|
||||
img: "/images/wiki/cambio_climático_004.png",
|
||||
titulo: "Emisiones CO₂ y temperatura París",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Emisiones globales de CO₂ y resultados probabilísticos de temperatura según los anuncios previos a la conferencia de París.",
|
||||
autor: "Jae Edmonds / PNNL",
|
||||
licencia: "Public domain",
|
||||
width: 1920, height: 806,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_005",
|
||||
archivo: "cambio_climático_005.png",
|
||||
img: "/images/wiki/cambio_climático_005.png",
|
||||
titulo: "Escenarios de emisiones futuras",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Proyecciones de emisiones globales de gases de efecto invernadero según distintos escenarios de política climática.",
|
||||
autor: "Hannah Ritchie y Max Roser",
|
||||
licencia: "CC BY 4.0",
|
||||
width: 2041, height: 1422,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_006",
|
||||
archivo: "cambio_climático_006.png",
|
||||
img: "/images/wiki/cambio_climático_006.png",
|
||||
titulo: "Gases efecto invernadero por sector",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Emisión de gases de efecto invernadero desglosada por sector económico.",
|
||||
autor: "Robert A. Rohde / Rojasyesid",
|
||||
licencia: "CC BY-SA 3.0",
|
||||
width: 617, height: 584,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_007",
|
||||
archivo: "cambio_climático_007.jpg",
|
||||
img: "/images/wiki/cambio_climático_007.jpg",
|
||||
titulo: "Temperatura de la Corriente del Golfo",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Imagen en falso color de la temperatura de la Corriente del Golfo. La corriente cálida es visible contra las aguas más frías circundantes.",
|
||||
autor: "NASA / MODIS Ocean Group",
|
||||
licencia: "Public domain",
|
||||
width: 538, height: 566,
|
||||
grupo: "satelite",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_008",
|
||||
archivo: "cambio_climático_008.png",
|
||||
img: "/images/wiki/cambio_climático_008.png",
|
||||
titulo: "Mapa de Pangea",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Mapa del supercontinente Pangea, relevante para entender la historia climática de la Tierra a escala geológica.",
|
||||
autor: "en:User:Kieff / user:tsca",
|
||||
licencia: "CC BY-SA 3.0",
|
||||
width: 772, height: 869,
|
||||
grupo: "esquema",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_009",
|
||||
archivo: "cambio_climático_009.jpg",
|
||||
img: "/images/wiki/cambio_climático_009.jpg",
|
||||
titulo: "Precesión y estaciones",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Diagrama de la precesión de la Tierra y su efecto sobre las estaciones, factor clave en los ciclos climáticos naturales.",
|
||||
autor: "Wikimedia Commons",
|
||||
licencia: "CC BY-SA 3.0",
|
||||
width: 593, height: 445,
|
||||
grupo: "esquema",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_010",
|
||||
archivo: "cambio_climático_010.png",
|
||||
img: "/images/wiki/cambio_climático_010.png",
|
||||
titulo: "Proyecciones nivel del mar",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Proyecciones del aumento del nivel medio del mar según Parris et al. (2012), traducidas al español.",
|
||||
autor: "Enescot / Hiperfelix",
|
||||
licencia: "CC0",
|
||||
width: 1355, height: 761,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_011",
|
||||
archivo: "cambio_climático_011.jpg",
|
||||
img: "/images/wiki/cambio_climático_011.jpg",
|
||||
titulo: "Palma de aceite en Riau, Sumatra",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Concesión de palma de aceite en Riau, Sumatra (Indonesia). La deforestación tropical es un factor relevante en el cambio climático.",
|
||||
autor: "Hayden / Flickr",
|
||||
licencia: "CC BY 2.0",
|
||||
width: 2048, height: 1365,
|
||||
grupo: "fotografia",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_012",
|
||||
archivo: "cambio_climático_012.png",
|
||||
img: "/images/wiki/cambio_climático_012.png",
|
||||
titulo: "Sistema climático terrestre",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Diagrama del sistema climático terrestre mostrando las interacciones entre atmósfera, hidrosfera, criosfera y biosfera.",
|
||||
autor: "Martín, Rodrigo",
|
||||
licencia: "CC BY-SA 3.0",
|
||||
width: 1164, height: 612,
|
||||
grupo: "esquema",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_013",
|
||||
archivo: "cambio_climático_013.png",
|
||||
img: "/images/wiki/cambio_climático_013.png",
|
||||
titulo: "Ciclos solares e irradiancia",
|
||||
articulo: "Cambio climático",
|
||||
descripcion: "Los últimos tres ciclos solares medidos en irradiancia solar, manchas solares, actividad de erupciones y flujo de radio.",
|
||||
autor: "Robert A. Rohde",
|
||||
licencia: "CC BY-SA 3.0",
|
||||
width: 700, height: 466,
|
||||
grupo: "grafico",
|
||||
},
|
||||
{
|
||||
id: "cambio_climático_014",
|
||||
archivo: "cambio_climático_014.jpg",
|
||||
img: "/images/wiki/cambio_climático_014.jpg",
|
||||
titulo: "Activismo climático juvenil (TedX)",
|
||||
articulo: "Cambio climático e infancia",
|
||||
descripcion: "Aayan Aggarwal durante su charla TedX sobre cambio climático e infancia en el NMIMS de Shirpur.",
|
||||
autor: "Dk4588",
|
||||
licencia: "CC BY-SA 4.0",
|
||||
width: 791, height: 640,
|
||||
grupo: "fotografia",
|
||||
},
|
||||
];
|
||||
|
||||
// ── Conexiones temáticas entre imágenes ─────────────────────────────────────
|
||||
const GRUPO_COLORS = {
|
||||
fotografia: '#ff4500',
|
||||
grafico: '#39ff14',
|
||||
esquema: '#00fff2',
|
||||
satelite: '#cc44ff',
|
||||
};
|
||||
|
||||
// Conectar imágenes del mismo grupo y artículo
|
||||
const links = [];
|
||||
for (let i = 0; i < WIKI_NODES.length; i++) {
|
||||
for (let j = i + 1; j < WIKI_NODES.length; j++) {
|
||||
const a = WIKI_NODES[i], b = WIKI_NODES[j];
|
||||
if (a.articulo === b.articulo) {
|
||||
links.push({ source: a.id, target: b.id, value: a.grupo === b.grupo ? 80 : 40 });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const graphData = { nodes: WIKI_NODES, links };
|
||||
|
||||
// ── Render ───────────────────────────────────────────────────────────────────
|
||||
const elem = document.getElementById('graph');
|
||||
const textureCache = {};
|
||||
const loader = new THREE.TextureLoader();
|
||||
|
||||
function getTexture(url) {
|
||||
if (!textureCache[url]) {
|
||||
const t = loader.load(url);
|
||||
t.colorSpace = THREE.SRGBColorSpace;
|
||||
textureCache[url] = t;
|
||||
}
|
||||
return textureCache[url];
|
||||
}
|
||||
|
||||
const Graph = ForceGraph3D()(elem)
|
||||
.backgroundColor('#000000')
|
||||
.nodeLabel(node => `<div style="font-family:Fira Code,monospace;font-size:11px;color:${GRUPO_COLORS[node.grupo]};background:rgba(0,0,0,0.8);padding:4px 8px;border:1px solid ${GRUPO_COLORS[node.grupo]}33">${node.titulo}</div>`)
|
||||
.nodeColor(node => GRUPO_COLORS[node.grupo] || '#fff')
|
||||
.nodeVal(node => {
|
||||
const area = node.width * node.height;
|
||||
return Math.max(1.5, Math.min(6, area / 500000));
|
||||
})
|
||||
.linkColor(link => {
|
||||
const val = link.value || 40;
|
||||
return val > 60 ? 'rgba(57,255,20,0.4)' : 'rgba(57,255,20,0.15)';
|
||||
})
|
||||
.linkWidth(link => link.value > 60 ? 1.2 : 0.4)
|
||||
.nodeThreeObject(node => {
|
||||
const texture = getTexture(node.img);
|
||||
const material = new THREE.SpriteMaterial({ map: texture, transparent: true });
|
||||
const sprite = new THREE.Sprite(material);
|
||||
// Escalar manteniendo aspect ratio aproximado
|
||||
const ratio = node.width / node.height;
|
||||
const baseSize = 14;
|
||||
sprite.scale.set(baseSize * Math.min(ratio, 1.6), baseSize / Math.max(ratio, 0.6));
|
||||
return sprite;
|
||||
})
|
||||
.onNodeClick(node => {
|
||||
const panel = document.getElementById('detail');
|
||||
document.getElementById('d-img').src = node.img;
|
||||
document.getElementById('d-title').textContent = node.titulo;
|
||||
document.getElementById('d-desc').textContent = node.descripcion;
|
||||
document.getElementById('d-articulo').textContent = node.articulo;
|
||||
document.getElementById('d-licencia').textContent = node.licencia;
|
||||
document.getElementById('d-autor').textContent = node.autor;
|
||||
document.getElementById('d-size').textContent = `${node.width}×${node.height}px`;
|
||||
panel.style.display = 'flex';
|
||||
})
|
||||
.onNodeHover(node => { elem.style.cursor = node ? 'pointer' : null; })
|
||||
.graphData(graphData);
|
||||
|
||||
Graph.d3Force('charge').strength(-250);
|
||||
setTimeout(() => Graph.zoomToFit(800, 80), 1500);
|
||||
|
||||
window.addEventListener('resize', () => {
|
||||
Graph.width(elem.clientWidth).height(elem.clientHeight);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
2
VISUALIZACION/public/images/wiki/.gitignore
vendored
Normal file
2
VISUALIZACION/public/images/wiki/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
||||
Loading…
Add table
Add a link
Reference in a new issue