• Saltar a la navegación principal
  • Saltar al contenido principal
Geoinnova

Consultoría y Formación en SIG, Territorio y Medio Ambiente

  • Geoinnova
    • Quiénes somos
    • Coworking
    • Alianzas Estratégicas
    • Visor de proyectos Geoinnova
  • SIG y Desarrollo
    • Plugins QGIS
    • GeoNode
    • QElectricGIS
    • Planero Web
  • Consultoría Territorial
    • Planes de Emergencia Municipales de Protección Civil
    • Planes Urbanos de Actuación Municipal – PUAM
    • Evaluación Ambiental Estratégica de planes y programas
    • Minimización de Impacto Territorial y Declaración de Situación Individualizada en suelo no urbanizable
    • Turismo sostenible
  • Consultoría Ambiental
    • Trámites de Economía Circular
    • Prevención y gestión ambiental
    • Responsabilidad social corporativa
    • Estrategia de sostenibilidad
  • Formación
    • Todos los cursos
    • Formación para empresas
    • Máster y Diplomas
    • Cursos de QGIS Online Certificados
    • Cursos de programación, desarrollo SIG y geoservicios
    • Cursos de Teledetección
    • Cursos de Giswater
    • Cursos de SIG con ArcGIS
    • Cursos de Medio Ambiente
    • Campus
  • Divulgación
    • Blog
    • Tertulia Territorio Geoinnova
    • TFMs y otro trabajos de alumnos
    • Noticias
    • Webinars
    • Geolibrería
  • Contacto
    • Soporte – Tickets
Cursos SIG y Medio Ambiente APÚNTATE
Programación y Desarrollo SIG SIG Tecnología

Cómo visualizar series temporales con OpenLayers y servicios WMS

25/11/2025 Deja un comentario
Contenidos ocultar
Comprobar capacidades del servicio
Cargar los datos en nuestro visor
Animar la serie temporal

Las series temporales en mapas nos permiten visualizar cómo cambia un dato (por ejemplo, temperatura, precipitación, viento) a lo largo de un periodo de tiempo. En este artículo veremos cómo combinar un servicio WMS con capacidad de dimensión de tiempo con OpenLayers para mostrar un mapa que presenta estas variaciones temporales. Con este fin, utilizaremos como fuente de datos el servicio WMS disponible en la página National Weather Service o NWS.

Obviamente, no todos los servicios OGC tienen soporte para series temporales, por tanto es importante asegurarnos de las capacidades realizando una petición al servidor (?REQUEST=GetCapabilities). Normalmente debe soportar la propiedad «TIME«, aunque como veremos aquí no siempre es así, puesto que en nuestro ejemplo, el servicio WMS utiliza la propiedad «VTIT» (valid-time / issuance time) para la dimensión temporal.

Comprobar capacidades del servicio

Como apuntábamos antes, lo primero es ver las capacidades del servicio y asegurarnos que soporta/tiene datos temporales. Para ello realizaremos una petición. La NWS expone varios endpoints distintos, en mi caso elegiré el endpoint de Alaska: https://digital.weather.gov/ndfd.alaska/wms?REQUEST=GetCapabilities.

XML con las capacidades del servicio

Cargar los datos en nuestro visor

Para no alargar mucho, vamos a dar por hecho cómo crear un mapa básico con OpenLayer.

Agregar nuestra capa temporal no se diferencia de como cargar cualquier capa «estática»:

const nwsWmsLayer = new TileLayer({
    source: new TileWMS({
        url: 'https://digital.weather.gov/ndfd/wms',
        params: {
            'LAYERS': 'ndfd.alaska.windspd.points.metric', // Capa de velocidad del viento
            'FORMAT': 'image/png',
            'VERSION': '1.3.0',
            'SEASON': 0, // temporada, según la documentación del servicio
            'VTIT': '2025-10-21T09:00', // valor temporal inicial
            'CRS': 'EPSG:3857'
        }
    })
});
map.addLayer(nwsWmsLayer);

Si todo está correcto, deberíamos de ver unas etiquetas con la velocidad del viento en distintos puntos de Alaska.

Puntos con la velocidad del viento sobre Alaska

Animar la serie temporal

Todo está muy bien, pero no podemos movernos o explorar la serie, simplemente vemos la capa con la fecha inicial especificada. Para convertirlo en una serie temporal (animar entre distintos tiempos) puedes usar un control de “Reproducir/Pausar” y actualizar el parámetro temporal periódicamente con los valores obtenidos al consultar el servicio.

De nuevo, para simplificar y agilizar, simplemente vamos a crear un una matriz con los valores de la serie de nuestra capa seleccionada que posteriormente utilizaremos para iterar y construir nuestra animación:

const vtitValues = [
    '2025-10-21T09:00', '2025-10-21T12:00', '2025-10-21T15:00', '2025-10-21T18:00', '2025-10-21T21:00', '2025-10-22T00:00',
    '2025-10-22T03:00', '2025-10-22T06:00', '2025-10-22T09:00', '2025-10-22T12:00', '2025-10-22T15:00', '2025-10-22T18:00',
    '2025-10-22T21:00', '2025-10-23T00:00', '2025-10-23T03:00', '2025-10-23T06:00', '2025-10-23T09:00', '2025-10-23T12:00',
    '2025-10-23T15:00', '2025-10-23T18:00', '2025-10-23T21:00', '2025-10-24T00:00', '2025-10-24T03:00', '2025-10-24T06:00',
    '2025-10-24T09:00', '2025-10-24T12:00', '2025-10-24T15:00', '2025-10-24T18:00', '2025-10-24T21:00', '2025-10-25T00:00',
    '2025-10-25T06:00', '2025-10-25T12:00', '2025-10-25T18:00', '2025-10-26T00:00', '2025-10-26T06:00', '2025-10-26T12:00',
    '2025-10-26T18:00', '2025-10-27T00:00', '2025-10-27T06:00', '2025-10-27T12:00', '2025-10-27T18:00', '2025-10-28T00:00',
    '2025-10-28T06:00', '2025-10-28T12:00', '2025-10-28T18:00', '2025-10-29T00:00'
];

Antes de continuar, editamos nuestro documento HTML para incluir un pequeño bloque de controles que nos permitirá iniciar, pausar y visualizar el instante temporal actual de la serie. Estos botones se situarán en la esquina superior derecha del mapa para que no interfieran con la visualización de las capas.

<div style="position: absolute; top: 10px; right: 10px; z-index: 1000;">
    <button id="play">Reproducir</button>
    <button id="pause">Pausar</button>
    <span id="info"></span>
</div>
Controles personalizados

A continuación, añadimos un poco de JavaScript para gestionar la animación. Este código recorre la lista de valores de tiempo, actualizando el parámetro VTIT de la capa WMS en cada paso y mostrando la marca temporal activa en el elemento <span>.

// Control de animación
let i = 0;
function nextFrame() {
    i = (i + 1) % vtitValues.length;
    nwsWmsLayer.getSource().updateParams({ 'VTIT': vtitValues[i] });
    document.getElementById('info').innerText = vtitValues[i];
}
// Reproducir la animación en bucle
let interval = null;
document.getElementById('play').addEventListener('click', () => {
    if (interval) return;
    interval = setInterval(nextFrame, 3000);
});
// Pausar la animación
document.getElementById('pause').addEventListener('click', () => {
    clearInterval(interval);
    interval = null;
});

Et voilà, al pulsar Reproducir, el mapa irá actualizando automáticamente la capa meteorológica cada tres segundos, y con Pausar podremos detener la secuencia en cualquier momento. Así obtenemos una forma que, aunque simple y algo rudimentaria, nos permite explorar la serie temporal y visualizar la evolución de las condiciones meteorológicas de manera dinámica.


Por supuesto, siempre podemos ampliar esta funcionalidad implementando plugins o extensiones de terceros (por ejemplo, controles de línea de tiempo más avanzados, deslizadores animados/timelines o librerías de interfaz) para mejorar la interacción y la experiencia del usuario.


Etiquetas: Openlayers, sig, web mapping

Apúntate a nuestra newsletter semanal

"*" señala los campos obligatorios

Este campo es un campo de validación y debe quedar sin cambios.
Consentimiento*

Artículos relacionados

misiones-sentinel-copernicus-geoinnova
Las misiones Sentinel del programa Copernicus: qué observa cada una y para qué se utilizan
25/08/2026
Qfield-nueva-actualización-trabajo-de-campo-geoinnova
QField 4.2: precisión subcentimétrica y nuevas herramientas para el trabajo de campo
22/07/2026
plugins-qgis-org-nueva-web-qt6-geoinnova
La web oficial de plugins de QGIS prepara su versión 4.0.0 ¿qué cambia para desarrolladores y usuarios?
08/07/2026

Rafael García

Graduado como Técnico Superior en Desarrollo de aplicaciones Web y Administración de Sistemas y Redes por el IES Gran Capitán de Córdoba.

Con experiencia en el sector desde 2014 en desarrollo web fullstack, creación y desarrollo de plugins y temas personalizados para Wordpress y aplicaciones Android nativas e híbridas. Defensor del código abierto, nerd, artista 3D y entusiasta de la tecnología.

Actualmente forma parte del equipo de Programación y Desarrollo de Geoinnova.

Interacciones con los lectores

¿Quieres comentarnos algo? Adelante! Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Geoinnova
c/ Luis Morondo Urra nº 8 Bajo A
31006 Pamplona (Navarra)
info@geoinnova.org
+34 948 117 137

Horario de atención

Lunes a Viernes - 09:00 a 14:00 y de 16:00 a 19:00.
Fines de semana y Festivos - Exclusivamente por mail.
Horario de Verano (01 de julio al 30 de agosto): De lunes a viernes de 8 a 15h.

Otras páginas de interes

  • Promociones y descuentos en formación
  • Formación bonificada FUNDAE
  • Verificador y descarga de Certificados de aprovechamiento
  • Cursos certificable por QGIS.org

Legal

  • Aviso Legal
  • Política de privacidad
  • Política de seguridad
  • Política de cookies
  • Términos y condiciones
Entidad adherida a Confianza Online Certificado de inscripción en el Registro de huella de carbono, compensación y proyectos de absorción Logo Plazox Certificado de conformidad con el ENS

Todo el contenido publicado desde 2009 hasta 2026 en el Blog de Geoinnova por Geoinnova y colaboradores está licenciado bajo CC BY-NC-ND 4.0
Para usos específicos, contactar con Geoinnova.

© 2026 · Desarrollada por Geoinnova

Gestionar el Consentimiento de las Cookies
Utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. Lo hacemos para mejorar la experiencia de navegación y para mostrar anuncios personalizados. El consentimiento a estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos anónimos. Sin una requerimiento, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarlo.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en un sitio web o en varios sitios web con fines de marketing similares.
  • Administrar opciones
  • Gestionar los servicios
  • Gestionar {vendor_count} proveedores
  • Leer más sobre estos propósitos
Personalizar
  • {title}
  • {title}
  • {title}