Mini Tutoriales | ArcGIS Online
Cómo crear un PopUp Inteligente con Arcade en ArcGIS Online
Por: Leonel Rivero - GeoSpatial Analyst
El uso de ventanas emergentes o PopUps representa el primer punto de interacción del usuario con el mapa. Por ello, es fundamental que estén bien diseñadas y comuniquen información clave de manera clara e inmediata.
En este minitutorial, te invito a conocer cómo mejorar la presentación del PopUp, integrando datos relevantes tanto del elemento principal como de registros relacionados mediante tablas asociadas, con el fin de optimizar la experiencia del usuario y el proceso de toma de decisiones basado en el contexto geográfico.
En el siguiente ejemplo, crearemos una ventana emergente que muestre información del equipo, su última inspección y la condición más crítica.
Paso 1: Abrir Map Viewer
En esta ocasión, requeriremos ArcGIS Online, Arcade y HTML Profesional.
Inicia sesión con tus credenciales de AGOL y abre el mapa web con tu capa de equipos.
Paso 2: Configurar la ventana emergente
Dirígete al panel del costado derecho y haz clic en elementos emergentes.
Paso 3: Agregar expresión de Arcade
Para agregar la expresión en Arcade, haz clic en "Agregar Contenido" y luego en "Arcade". A continuación, crea una nueva expresión.
Paso 4: Creación del código en Arcade
A continuación, revisaremos el HTML paso a paso para la correcta creación del PopUp.
4.1: Creación del contenedor principal
var html = `<div style=" margin-top:10px; background-color:#eef3f7; border:1px solid #003366; border-radius:6px; padding:10px; margin-bottom:16px; ">` return { type: 'text', text: html } |
4.2: Agregar información del equipo
html += `<div style=" background-color:#f1f1f1; border:1px solid #bbb; border-radius:6px; padding:10px; margin-bottom:14px; ">` <div style="font-size:14px; font-weight:bold; color:#003366;">🔧 Información del equipo</div> <div><b>ID:</b> ${$feature.ID_equipo}</div> <div><b>Nombre:</b> ${$feature.Nombre}</div> <div><b>Tipo:</b> ${$feature.TIPO}</div> html += `</div>`;
|
4.3: Mostrar última inspección
// Obtener inspecciones relacionadas var inspecciones = FeatureSetByRelationshipName($feature, 'Equipos')
// Ordenar por fecha descendente y tomar la más reciente var ultimas = OrderBy(inspecciones, 'fecha_inspeccion DESC') var recientes = First(ultimas)
// Asignar color según condición general var color = IIf(recientes.condicion_general == 'Crítico', '#d7191c', IIf(recientes.condicion_general == 'Alerta', '#fdae61', '#1a9641') )
// Construir bloque HTML para mostrar última inspección html += `<div style="background-color:#E6F4EA; border:1px solid #bbb; border-radius:6px; padding:10px; margin-bottom:14px;"> <div style="font-size:14px; font-weight:bold; color:#003366; margin-bottom:6px;">🕓 Última inspección</div> <div><b>Fecha:</b> ${Text(recientes.fecha_inspeccion, 'DD-MM-YYYY')}</div> <div><b>Inspector:</b> ${recientes.inspector}</div> <div><b>Condición:</b> <span style="color:${color}; font-weight:bold;">${recientes.condicion_general}</span></div> <div style="margin-top:6px;"> <b>Temperatura motor:</b> ${recientes.temperatura_motor} °C<br> <b>Vibración:</b> ${recientes.vibracion} mm/s </div> `; |
4.4: Evaluar la peor condición registrada
// Asignar pesos para cada estado var pesos = { "OK": 1, "Alerta": 2, "Crítico": 3 } var peor_valor = 0 var peor_registro = null
// Recorrer todas las inspecciones y encontrar la de mayor peso for (var p in inspecciones) { var peso = pesos[p.condicion_general] if (peso > peor_valor) { peor_valor = peso peor_registro = p } }
// Construir bloque HTML para mostrar peor condición html += `<div style="margin-top:10px; background-color:#eef3f7; border:1px solid #003366; border-radius:6px; padding:10px; margin-bottom:16px;"> <div style="font-size:14px; font-weight:bold; color:#d7191c; margin-bottom:6px;">🔴 Peor condición registrada</div> <div><b>Fecha:</b> ${Text(peor_registro.fecha_inspeccion, 'DD-MM-YYYY')}</div> <div><b>Inspector:</b> ${peor_registro.inspector}</div> <div><b>Condición:</b> <span style="color:${color}; font-weight:bold;">${peor_registro.condicion_general}</span></div> <div style="margin-top:6px;"> <b>Temperatura motor:</b> ${peor_registro.temperatura_motor} °C<br> <b>Vibración:</b> ${peor_registro.vibracion} mm/s </div> `; |
4.5: Cierre del contenedor principal y retorno
// Cierre del contenedor principal HTML html += `</div>`
// Retornar el contenido como tipo texto para el popup return { type: 'text', text: html } |
5: Visualiza el PopUp en el mapa
Revisa más de nuestros mini tutoriales en esta página.