8.2. Ejemplo con JavaScript puro (vanilla) – Mapa básico
En este ejemplo vamos a mostrar cómo representar la localización de los centros docentes de Castilla y León en un mapa sencillo usando solo HTML y JavaScript puro, sin librerías externas.
📌 Flujo de trabajo con vanilla JS
- Cargar el CSV con
fetch. - Parsearlo a objetos (leer cabecera y filas).
- Seleccionar un subconjunto (por ejemplo, los primeros centros o los de una provincia concreta).
- Obtener sus coordenadas (latitud y longitud).
- Generar un mapa básico con un
<iframe>de OpenStreetMap o Google Maps.
🧩 Código paso a paso
1) HTML base
<div id="mapa"></div>
2) Cargar y parsear el CSV
async function cargarCSV() {
const res = await fetch("datasets/csv/directorio-de-centros-docentes.csv");
const texto = await res.text();
let lineas = texto.trim().split("\n");
let cabeceras = lineas.shift().split(",");
return lineas.map(linea => {
let valores = linea.split(",");
return Object.fromEntries(cabeceras.map((c, i) => [c, valores[i]]));
});
}
3) Seleccionar un centro y sus coordenadas
function obtenerCentroEjemplo(datos) {
// Nos quedamos con el primer centro que tenga coordenadas válidas
return datos.find(d => d.Lat && d.Lon);
}
4) Insertar un mapa con iframe
function mostrarMapa(centro) {
const lat = centro.Lat;
const lon = centro.Lon;
// Usamos OpenStreetMap con zoom 15
const url = `https://www.openstreetmap.org/export/embed.html?bbox=${lon-0.01},${lat-0.01},${lon+0.01},${lat+0.01}&layer=mapnik&marker=${lat},${lon}`;
const iframe = document.createElement("iframe");
iframe.src = url;
iframe.width = "600";
iframe.height = "400";
iframe.style.border = "1px solid #ccc";
document.getElementById("mapa").appendChild(iframe);
}
5) Ponerlo todo junto
(async () => {
const datos = await cargarCSV();
const centro = obtenerCentroEjemplo(datos);
if (centro) {
mostrarMapa(centro);
console.log("Centro mostrado en el mapa:", centro.Nombre, centro.Municipio);
} else {
console.error("No se encontraron centros con coordenadas válidas.");
}
})();
Consejo
Este enfoque con <iframe> es muy básico:
- Solo permite mostrar un punto fijo en el mapa.
- No ofrece interacción avanzada (zoom dinámico, varios puntos, popups…).
En la siguiente lección usaremos Leaflet, una librería libre y ligera, para añadir todas esas funciones.
📝 Preguntas de repaso
Repaso
- ¿Qué campos del CSV son necesarios para situar un centro en un mapa?
- ¿Qué servicio gratuito hemos usado para generar el mapa dentro de un
<iframe>? - ¿Qué limitaciones tiene este enfoque frente a una librería como Leaflet?
- ¿Cómo cambiarías el código para mostrar un centro diferente al primero?
- ¿Qué parámetro de la URL controla el nivel de zoom en OpenStreetMap?