Mejoras en Arcade en ArcGIS Online con la Actualización de 5 de diciembre del 2018

Document created by xander_bakker on Dec 6, 2018
Version 1Show Document
  • View in full screen mode

Anoche se actualizó ArcGIS Online, y esto nos trae muchas mejoras. Para leer más acerca estas mejoras se puede consultar la página Novedades—Ayuda de ArcGIS Online | ArcGIS 

 

En esta actualización también hube mejoras en ArcGIS Arcade | ArcGIS for Developers . Aunque al momento de escribir este documento todavía indique que estamos en la versión 1.4 de julio 2018, en verdad ya contamos con la versión 1.5 actualizada en la noche del 5 de diciembre.

 

Quizás lo mejor que se puede hacer es directamente mostrar un ejemplo para empezar a entender las configuraciones que ahora son posibles en el mapa web de ArcGIS Online. En el primer ejemplo tenemos un mapa de recintos policiales y los puntos de los eventos de seguridad. Queremos que en la ventana emergente se muestre un resumen de los tipos de crímenes y su recuento.

 

 

Al hacer clic sobre un polígono, nos muestre la siguiente información:

 

Para cada tipo de crimen nos indique la cantidad de ellos en el polígono seleccionado. ¿Si la información de estos crímenes está almacenada en otra capa, como logramos visualizarlo en la ventana emergente de los polígonos? La respuesta; con las nuevas funcionalidades de Arcade.

 

Miramos la expresión que se utilizó para lograr el resultado:

var used = {};
var distinctlist = [];
var counter = 0;
var crime = "";
var crimeList = "";
var intersectPrecinct = Intersects(FeatureSetByName($datastore,"Crimes"), $feature)
for(var f in intersectPrecinct) {
    if (hasKey(used, f.ucrdesc)==false) {
                    used[f.ucrdesc]=1;
                   
    } else {
        used[f.ucrdesc] +=  1
    }
}

for (var k in used) {
    crime = k + ":" + used[k]  +TextFormatting.NewLine
    crimeList += crime
}
return crimeList

 

La magia pasa en la linea 6 donde se está usando una nueva función "FeatureSetByName":

FeatureSetByName($datastore,"Crimes")

 

Con esta función podemos desde la capa de polígonos tener acceso a la capa de puntos almacenado en el mismo datastore (servicio con las capas alojadas en ArcGIS Online). En la misma línea también se está haciendo uso de la función geométrica "Intersects" para obtener solamente estos puntos de eventos que están dentro del polígono actual (el polígono donde hicimos clic para mostrar la ventana emergente).

 

El resultado es un listado de los puntos ubicados en el polígono. En las líneas 7 a 14 se corre por estos puntos para crear un diccionario que contiene el nombre del tipo de evento de seguridad y su conteo. En las líneas 16 a 19 se construye el texto con el nombre del tipo de evento y su conteo lo que se muestre en la ventana emergente.

 

Otro ejemplo puede ser sacando estadísticas de datos almacenadas en una tabla relacionado a una capa de puntos. Esto nos permite para determinar el momento en que un sensor registró un valor mínimo o máximo en toda su historia:

 

En este caso tenemos puntos de sensores y una tabla de historia de presión registrado en el sensor. No es necesario que la tabla está participando en un relationshipclass con la capa de puntos y tampoco es necesario que la tabla está en el mismo $datastore. Miramos el código de Arcade que se utilizó para lograr este resultado:

// Acceder a la tabla por su nombre en el mapa
var tbl = FeatureSetByName($map, 'Tabla P1');

// crear SQL con base en nombre de ubicación
var location = $feature.Location;
var sql ="Location = '" + location + "'";
Console(sql);

// Filtrar tabla con base el SQL
var tbl_loc = Filter(tbl, sql);

// definir valores iniciales
var min_val = 100;
var max_val = -100;
var min_date = Null;
var max_date = Null;
var cnt = 0;

// recorrer registros en tabla filtrado
for (var row_p1 in tbl_loc) {
    cnt += 1; // contar registros
    var P1 = row_p1.P1; // leer P1
    // ajustar min P1
    if (P1 < min_val) {
        min_val = P1;
        min_date = row_p1.Timestamp;
    }
    // ajustar max P1
    if (P1 > max_val) {
        max_val = P1;
        max_date = row_p1.Timestamp;
    }
}

// construir el resultado
var result = "Min P1: " + min_val + " (" + Text(min_date, "DD-MM HH:mm:ss") + ")";
result += TextFormatting.NewLine + "Max P1: " + max_val + " (" + Text(max_date, "DD-MM HH:mm:ss") + ")";

return result;

Explicación de la expresión:

  • En la línea 2 accedemos desde la capa de puntos de sensores a la tabla de la historia
  • En las líneas 5 y 6 construimos una consulta SQL para filtrar los datos por el sensor actual (con el campo location)
  • En la línea 10 filtramos la tabla para obtener los datos de solamente el sensor actual
  • En las líneas 13 a 17 asignamos unos valores por defecto que necesitamos para procesar la historia
  • En la línea 20 empezamos a recorrer por la historia del sensor que seleccionamos
  • En la línea 22 leemos el dato de la presión
  • En las líneas 24 a 27 validamos si el dato es menor al mínimo que tenemos, en caso que si se ajuste el mínimo y se registre la fecha de este dato
  • En las líneas 29 a 32 hacemos lo mismo para el máximo valor
  • En las líneas 36 y 37 construimos el texto que queremos mostrar en la ventana emergente

 

Para finalizar un ejemplo muy pequeño pero bastante potente. Podemos sacar estadísticas sobre un campo de la capa:

return Mean($layer, "P1");

 

En este caso podemos determinar la media del campo P1 en la capa o tabla actual y así incluso comparar si un valor está por encima o por debajo de este valor.

 

Espero que estos ejemplos ayudan a entender las grandes posibilidades que ofrecen las nuevas funciones de Arcade.

1 person found this helpful

Attachments

    Outcomes