En muchos casos la costumbre es usar una visualización por defecto de los atributos en la ventana emergente, ¿pero con esto estamos entregando la mejor experiencia al usuario?
Aprovechando Arcade es posible mejorar esta experiencia al usuario y brindar una visualización que no solamente sea más atractiva, pero también optimice la interpretación de los datos. Un ejemplo de los mismos datos se puede observar abajo:
En este caso estamos usando una capa de municipios y para cada municipio tiene información sobre la cantidad de personas con acceso y sin acceso a los servicios públicos (acueducto, alcantarillado, electricidad, gas y telefonía). Con base en esto podemos calcular el porcentaje de cobertura para cada servicio:
El cálculo es sencillo, pero para crear una visualización atractiva con los datos, debemos usar un elemento de Arcade que genere código HTML. La expresión de Arcade consiste en 2 partes; la configuración y el análisis donde se conecta a los datos, realicen los cálculos y genere el HTML basada en la configuración:
Para agregar HTML a la ventana emergente, no se debe elegir la opción “Expresiones de atributos”, pero hacer clic en “Agregar contenido” y luego elegir “</> Arcade”:
En el editor de Arcade se puede ver un ejemplo del formato que la expresión debe entregar:
Es un diccionario, que indique que el tipo de información que genere es un texto y el texto es el HTML que la expresión debe generar.
El HTML no es muy complejo y utilice un número de tags limitado.
En las tables el uso de estilo CSS si es frecuente para obtener la visualización deseada. Al final de este documento pueden encontrar el código completo de Arcade usado para este ejemplo.
Una explicación de la expresión Arcade:
// configuración
var img_width = "50";
var img_height = "50";
var style_table1 = "width: 100%;border: 0px solid black;border-collapse: collapse;font-family: Segoe UI, Tahoma, Verdana, Geneva, Arial, Helvetica, sans-serif;font-size: 11pt;";
var style_tbl1tr = "valign='valign' style='background-color: rgb(255, 255, 255);'";
var style_tbl1cell1 = "border: 0px solid rgb(255, 255, 255);background-color:rgb(255, 255, 255);text-align:left;height:60px;width:60px";
var style_tbl1cell2 = "border: 0px solid rgb(255, 255, 255);padding-right: 5px;color:rgb(0, 0, 0);background-color:rgb(255, 255, 255);text-align:left;height:60px;width:250px";
var style_table2 = "width: 100%;border: 0px solid black;border-collapse: collapse;font-family: Segoe UI, Tahoma, Verdana, Geneva, Arial, Helvetica, sans-serif;font-size: 9pt;";
var style_tbl2tr = "valign='valign' style='background-color: rgb(255, 255, 255);'";
var style_tbl2tdpart1 = "style='border: 1px solid ";
var style_tbl2tdpart2 = ";padding-right: 5px;color:rgb(0, 0, 0);background-color:";
var style_tbl2tdpart3 = ";text-align:center;height:25px;width:10%'";
var separation_between_data = "<br />";
var separation_after_header = ""; //"<br />";
var border_col_data = "rgb(0, 0, 0)";
var border_col_nodata = "rgb(200, 200, 200)";
var backgr_col_nodata = "rgb(255, 255, 255)";
// temas a tratar
var arr_info = ["Electricidad", "Acueducto", "Alcantarillado", "Gas Natural", "Telefonía"];
// info por tema
var dct_fieldinfo = {"Electricidad":
{"Title": "Cobertura de Electricidad",
"With": "P_ENERSI",
"Without": "P_ENERNO",
"NoData": "",
"img": "https://utility-esri-co.maps.arcgis.com/sharing/rest/content/items/817da1062ed643a39b0b721f7136f684/data",
"reverse": true},
"Acueducto":
{"Title": "Cobertura de Acueducto",
"With": "P_ACUESI",
"Without": "P_ACUENO",
"NoData": "",
"img": "https://utility-esri-co.maps.arcgis.com/sharing/rest/content/items/7c37c2849bbd475e94cb053d6081f641/data",
"reverse": true},
"Alcantarillado":
{"Title": "Cobertura de Alcantarillado",
"With": "P_ALCANSI",
"Without": "P_ALCANNO",
"NoData": "",
"img": "https://utility-esri-co.maps.arcgis.com/sharing/rest/content/items/015376acd80c41a4bf2fe6ac2bd53e92/data",
"reverse": true},
"Gas Natural":
{"Title": "Cobertura de Gas Natural",
"With": "P_GASNSI",
"Without": "P_GASNNO",
"NoData": "P_GASNNOIN",
"img": "https://utility-esri-co.maps.arcgis.com/sharing/rest/content/items/a9811a6c7e9c444381d1dad8d1f9894d/data",
"reverse": true},
"Telefonía":
{"Title": "Cobertura de Telefonía",
"With": "P_TELEFSI",
"Without": "P_TELEFNO",
"NoData": "P_TELEFNOI",
"img": "https://utility-esri-co.maps.arcgis.com/sharing/rest/content/items/c5b285416954406a9883748c6b30ddad/data",
"reverse": true},
};
// colores
var arr_rampcolors = ["rgb(113, 159, 102)",
"rgb(82, 186, 149)",
"rgb(128, 221, 164)",
"rgb(195, 255, 151)",
"rgb(235, 255, 100)",
"rgb(254, 233, 77)",
"rgb(252, 191, 76)",
"rgb(244, 136, 87)",
"rgb(210, 76, 76)",
"rgb(151, 76, 76)"];
// invertir colores (en caso que aplique)
var arr_rampcolorsrev = Reverse(arr_rampcolors);
var html = "";
Console($feature["MUNICIPIO"]);
Console($feature["DEPTO"]);
var conservicio = -1;
var sinservicio = -1;
var nodata = -1;
var score = -1;
var scoreint10 = -1;
var scoredec = -1;
var scoredectxt = "";
var servicio = "";
var info = {};
var img = "";
var title = "";
var i = 0;
var fld_nodata = "";
var fld_border_col = "";
var fld_backgr_col = "";
var fld_with = "";
var fld_without = "";
for (i in arr_info) {
servicio = arr_info[i];
info = dct_fieldinfo[servicio];
// construir titulo
img = info["img"]; // url de imagen
title = info["Title"]; // titulo del dato
var reverseramp = info["reverse"]; // no está implementado por el momento TODO
var use_ramp = arr_rampcolors;
if (reverseramp == true) {
use_ramp = arr_rampcolorsrev;
}
// calcular porcentaje
fld_with = info["With"];
fld_without = info["Without"];
fld_nodata = info["NoData"];
Console(fld_with);
Console(fld_without);
Console(fld_nodata);
conservicio = $feature[fld_with];
sinservicio = $feature[fld_without];
Console(conservicio);
Console(sinservicio);
if (fld_nodata == "") {
nodata = 0;
} else {
nodata = $feature[fld_nodata];
}
score = conservicio / (conservicio + sinservicio + nodata) * 100.0;
scoreint10 = Round(score/10, 0);
scoredec = Round(score, 2);
// tabla con datos a presentar
html += "<table style='" + style_table1 + "'>";
html += "<tbody>";
html += " <tr " + style_tbl1tr+ ">";
html += " <td style='" + style_tbl1cell1 + "'><img src='" + img + "' width='" + img_width + "' height='" + img_height + "'></td>";
html += " <td style='" + style_tbl1cell2 + "'><h3>" + title + "</h3></td>";
html += " </tr>";
html += " </tbody>";
html += "</table>";
html += separation_after_header;
// tabla con colores
html += "<table style='" + style_table2 + "'>";
html += "<tbody>";
html += " <tr " + style_tbl2tr + ">";
for (var j = 0; j < 10; j++) {
Console("j:" + j)
// construir tabla con colores
if (scoreint10 == j+1) {
// usar colores y texto
Console("usar colores y texto");
scoredectxt = scoredec;
fld_border_col = border_col_data;
fld_backgr_col = use_ramp[j];
} else if (scoreint10 > j+1) {
Console("usar colores sin texto");
// usar colores sin texto
scoredectxt = "";
fld_border_col = border_col_data;
fld_backgr_col = use_ramp[j];
} else {
// sin color y sin texto
Console("sin color y sin texto");
scoredectxt = "";
fld_border_col = border_col_nodata;
fld_backgr_col = backgr_col_nodata;
}
html += " <td "+ style_tbl2tdpart1 + fld_border_col + style_tbl2tdpart2 + fld_backgr_col + style_tbl2tdpart3 + "><b>" + scoredectxt + "</b></td>";
Console(" <td "+ style_tbl2tdpart1 + fld_border_col + style_tbl2tdpart2 + fld_backgr_col + style_tbl2tdpart3 + "><b>" + scoredectxt + "</b></td>")
}
html += " </tr>";
html += " </tbody>";
html += "</table>";
html += separation_between_data
}
Console("");
Console("");
Console(html);
return {
type : 'text',
text : html
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.