Utilizar expresiones de Arcade

ArcGIS Arcade es un lenguaje de expresión portátil, ligero y seguro que puede realizar cálculos matemáticos, manipular texto y evaluar sentencias lógicas. También admite expresiones de varias sentencias, variables y sentencias de control de flujo. Lo que hace que Arcade sea especialmente único en comparación con otros lenguajes de scripts y expresiones es su inclusión de los tipos de datos de entidad y geometría. Un caso de uso habitual de Arcade es realizar un cálculo con campos de capa y geometría.

Notas de uso

Tenga en cuenta lo siguiente cuando utilice expresiones de Arcade:

  • Las expresiones de Arcade se admiten en las herramientas Detectar incidentes, Calcular campo, Filtrar por expresión, Campos de mapa, Unir entidades, Crear zonas de influencia y Reconstruir recorridos.
  • Las expresiones pueden incorporar atributos de feeds y fuentes de entrada, así como valores que describen el análisis en el que se configura la expresión.
  • En el generador de expresiones, las variables de perfil pueden expandirse para mostrar una lista de campos, valores de tiempo, campos de destino y campos de unión. Las expresiones de ArcGIS Velocity aprovechan las siguientes variables de perfil:
    • $feature: en todas las herramientas excepto Entidades de unión, esta variable contiene los campos de atributos de las entidades de entrada de feeds y fuentes. Es posible crear expresiones que aprovechen los valores de atributos de entidades seleccionando campos de esta variable.
    • $analytic: esta variable contiene valores específicos del análisis, como $analytic.AnalyticStartTime y $analytic.AnalyticLastEndTime.
      • Para convertir estos valores de variables de análisis de un entero epoch (1646409900000) en una fecha, utilice la función Arcade de Date(). Para obtener más información, consulte Funciones de fecha en la documentación de ArcGIS Arcade.
    • $target: en la herramienta Entidades de unión, para la expresión Condición de unión, esta variable de perfil contiene los campos de atributos del feed o fuente de destino.
    • $join: en la herramienta Entidades de unión, para la expresión Condición de unión, esta variable de perfil contiene los campos de atributos de origen de la unión.
  • Acceda a campos y componentes de esquema en el generador de expresiones de Arcade.
    • En el panel Variables de perfil, acceda a campos, variables y componentes del esquema relacionados con la categoría, por ejemplo, las categorías $feature, $analytic, $target o $join.

      Acceder a campos y variables

    • Muestra los campos o variables relacionados con esa variable.

      Enumerar el campo y las variables relacionados con la categoría

  • Proporcione sus propios valores de muestra para pruebas de expresiones de Arcade.
    • Arcade proporciona los valores de muestra predeterminados correspondientes a cada herramienta en función del esquema entrante. Puede actualizar los valores de muestra mientras genera expresiones para cada herramienta.
    • Para ajustar los valores de muestra para pruebas de expresiones de Arcade, haga lo siguiente:
      • A partir del esquema entrante, si hace clic para editar la expresión Arcade, se abre la ventana Configurar una expresión de Arcade.
      • En la pestaña $feature, observe que aparece un valor de muestra basado en este tipo de datos para cada campo entrante. Por ejemplo, cada campo de cadena de caracteres tiene un valor de muestra de Pacífico. Para crear y probar una expresión válida para diferentes datasets, debe cambiar los valores de muestra proporcionados para un campo, de modo que la expresión de Arcade evalúe la expresión y devuelva el tipo de datos correcto devuelto por la expresión.

        Acceder a la pestaña $feature para cambiar los valores de muestra

      • Ajuste el valor de muestra si se utiliza en la prueba y evaluación de la expresión de Arcade.

        Editar valores de muestra utilizados en la lógica de la expresión de Arcade

      • Haga clic en Ejecutar en la parte superior izquierda de la ventana Configurar una expresión de Arcade para ejecutar la expresión de Arcade. La expresión se evaluará en función de los datos de muestra actualizados que se proporcionen.
  • Cree expresiones de Arcade para gestionar valores nulos y 0.
    • En los operadores matemáticos, el lenguaje de expresión de Arcade trata los valores nulos como 0 para su evaluación. Por lo tantArcadeArcadeo, se deben crear expresiones matemáticas en ArcGIS Velocity para justificar los valores nulos en sus datos.
    • Los valores nulos de los datos pueden justificarse manipulándolos. Considere la expresión de $feature.DistanceToFeature <= 5. Esta expresión debe construirse en el lenguaje Arcade para gestionar los valores nulos como $feature.DistanceToFeature != null && $feature.DistanceToFeature <= 5. En estas expresiones, <= 5 es una operación matemática y, si el valor del campo DistanceToFeature es nulo, se evalúa como 0, lo que aprobaría la expresión.

Ejemplos de operadores matemáticos y funciones

Las expresiones pueden procesar números matemáticamente. La siguiente tabla proporciona una muestra de las operaciones disponibles. Para obtener más información sobre las operaciones matemáticas en Arcade, consulte Funciones matemáticas.

Operador

Explicación

Ejemplo

Resultado

a + b

a más b.

fieldname contiene un valor de 1,5

$target["fieldname"] + 2.5

4.0

a - b

a menos b.

fieldname contiene un valor de 3,3

$target["fieldname"]- 2.2

1.1

a * b

a por b.

fieldname contiene un valor de 2,0

$join["fieldname"] * 2.2

4.4

a / b

a dividido por b.

fieldname contiene un valor de 4,0

$join["fieldname"] / 1.25

3.2

abs( a )

Devuelve el valor absoluto (positivo) de a.

fieldname contiene un valor de -1,5

abs($target["fieldname"])

1,5

log( a )

Devuelve el logaritmo natural (base e) de a.

fieldname contiene un valor de 1

log($join["fieldname"])

0

sin( a )

Devuelve el seno trigonométrico de a. Se presupone que la entrada es un ángulo en radianes.

fieldname contiene un valor de 1,5707

sin($target["fieldname"])

1

cos( a )

Devuelve el coseno trigonométrico de a. Se presupone que la entrada es un ángulo en radianes.

fieldname contiene un valor de 0

cos($join["fieldname"])

1

tan( a )

Devuelve la tangente de a. Se presupone que la entrada es un ángulo en radianes.

fieldname contiene un valor de 0

tan($target["fieldname"])

0

sqrt( a )

Devuelve la raíz cuadrada de a.

fieldname contiene un valor de 9

sqrt($join["fieldname"])

3

min( a, b )

Devuelve el número que tenga el valor más bajo de a y b.

fieldname contiene un valor de 1,5 y un valor de -3

min($join["fieldname"], -3)

-3

max( a, b )

Devuelve el número que tenga el valor más alto de a o b.

fieldname1 contiene un valor de 1,5 y fieldname2 contiene un valor de -3

max($target["fieldname1"], $join["fieldname2"])

1,5

constrain(<value>,<low>,<high>)

Devuelve el valor de entrada si está contenido en los límites de la restricción. Si el valor de entrada es menor que el valor bajo, devuelve el valor bajo. Si el valor de entrada es mayor que el valor alto, devuelve el valor alto.

constrain($target["distance"], 0, 10)

constrain($join['Store dist'], 6, distance)

Devuelve 0 si distance es menor que 0, 10 si distance es mayor que 10 y distance en los demás casos.

Devuelve 6 si Store dist es menor que 6, distance si Store dist es mayor que distance y Store dist en los demás casos.

El siguiente ejemplo de multiplicación para una expresión de condición de unión utiliza un campo del dataset de destino:

$target["Distance"] * 2 > $join["DistField"]

Ejemplos de la función Texto

Las expresiones de Arcade pueden procesar texto. La siguiente tabla proporciona una muestra de las operaciones disponibles. Para obtener más información sobre las funciones de texto en Arcade, consulte Funciones de texto.

Operador

Explicación

Ejemplo

Resultado

concatenate(<values>, <separator>)

Concatena valores juntos y devuelve una cadena de caracteres.

  • values: un conjunto de valores de cadena de caracteres a concatenar.
  • separator (opcional): un separador a utilizar para la concatenación si el parámetro de valores es una matriz o bien una cadena de caracteres para concatenar si se proporciona un valor único para el primer parámetro. Si no se proporciona, estará vacío.

fieldname contiene un valor de ArcGIS Velocity

concatenate([$target["fieldname"], "is", "great!"], ' ')

ArcGIS Velocity es excelente.

find(<searchText>, <text>, <startPos>)

Busca una cadena de caracteres dentro de otra cadena de caracteres. Los comodines no se admiten.

  • searchText: la cadena de caracteres que se va a buscar.
  • text: el texto en el que buscar.
  • startPos (opcional): el índice basado en cero de la ubicación de la cadena donde buscar.

fieldname1 contiene un valor de 14NorthStreet y fieldname2 contiene un valor de North

find($target["fieldname2"], $join["fieldname1"])

2

lower(<value>)

Forma una cadena de caracteres en minúscula.

  • value: la cadena de caracteres que se desea cambiar a minúsculas.

fieldname contiene un valor de ANALYTICS

lower($join["fieldname"])

análisis

El siguiente ejemplo de texto utiliza la búsqueda y la parte inferior:

find(("north"), lower("146NorthStreet")) == False

Ejemplos de la función Date

Arcade puede procesar fechas. En Arcade, los valores de mes oscilan entre 0 (enero) y 11 (diciembre), los días entre 1 y 31, las horas entre 0 (12:00 a.m.) y 23 (11:00 p.m.), minutos y segundos entre 0 y 59, y las milésimas de segundo entre 0 y 999.

La siguiente tabla proporciona una muestra de las operaciones disponibles. Para obtener más información sobre las funciones de fecha en Arcade, consulte Funciones de fecha.

Operador

Explicación

Ejemplo

Resultado

date( <value>, <month>, <day>, <hour>, <minute>)

Analiza un valor o conjunto de valores en una cadena de caracteres de fecha.

  • value (opcional): el número de milésimas de segundo desde el 1 de enero de 1970 UTC o un número que represente un año. Si se especifica un año, el mes y el día también deben proporcionarse en los parámetros correspondientes. Este valor también puede ser una cadena de caracteres de fecha o una cadena de caracteres ISO 8601 para convertir en una fecha.
  • month (opcional): el mes (0–11), donde 0 es enero y 11 es diciembre.
  • day (opcional): el día del mes (1–31).
  • hour (opcional): la hora del día (0–23).
  • minute (opcional): el minuto de la hora (0–59).
  • second (opcional): el segundo del minuto (0–59).
  • millisecond (opcional): la milésima de segundo del segundo (0–999).

fieldname contiene un valor de 1476987783555

Ejemplo 1: Date($target["fieldname"])

Ejemplo 2: Date(2017,0,14,0)

Ejemplo 3: Date()

Ejemplo 1: 20 oct 2016 11:23:03 am

Ejemplo 2: 14 ene 2017 12:00:00 am

Ejemplo 3: devuelve la hora actual

DateDiff(<date1>, <date2>, <units>)

Resta dos fechas y devuelve la diferencia en las unidades especificadas.

  • date1: el valor de fecha del cual se sustrae una segunda fecha.
  • date2: el valor de fecha a sustraer desde la primera fecha dada.
  • startpos (opcional): las unidades en las que se devuelve la diferencia entre las dos fechas dadas. Los tipos de unidad admitidos son: milisegundos, segundos, minutos, horas, días, meses y años. El valor predeterminado es milésimas de segundo.

Ejemplo 1: DateDiff(Date(2017,1,14,0), Date())

Ejemplo 2: DateDiff(Date(2017,1,14,0), Date(), "Years")

El resultado variará dependiendo de cuándo se ejecute el comando.

Ejemplo 1: -20532129137

Ejemplo 2: -0,6546783768647119

Year(<dateValue>)

Devuelve el año de la fecha dada.

  • value: un valor de fecha del que se obtiene el año.

Ejemplo 1: fieldname es un campo de tipo Fecha con un valor de 09 Oct 2017 04:30:43 pm

Year($join["fieldname"])

Ejemplo 2: fieldname es un campo de cadena formateado como una cadena de caracteres ISO 8601 con un valor de 2012-09-27

Ejemplo 3: fieldname es un campo de cadena cuyo formato es una cadena de caracteres ISO 8601 con el valor Year(Date($target["fieldname"]))

Ejemplo 1: 2017

Ejemplo 2: 2012

Operadores condicionales

Las declaraciones condicionales pueden usar los siguientes operadores:

Operador

Explicación

Ejemplo

Resultados

a > b

a < b

a es mayor que b.

a es menor que b.

10 > 2

False

a >= b

a <= b

a es mayor o igual que b.

a es menor o igual que b.

abs(-10) >= 10

True

a != b

a no es igual que b.

abs(-3) != -3

True

a == b

a es igual que b.

abs(-5) == 5

True

<condition1> || <condition2>

Se cumplen la condición 1 o la condición 2.

(abs(-5) == 5) || (10 < 2)

True

<condition1> && <condition2>

Se cumplen la condición 1 y la condición 2.

(abs(-5) == 5) && (10 < 2)

False

El siguiente ejemplo de una expresión de zona de influencia utiliza funciones y condiciones avanzadas:

iif(field1 > field2, iif(field2 = 0, field3, field4), 0)

A continuación, se muestra un ejemplo de multiplicación de una condición de unión:

iif(field1 > field2, iif(field2 = 0, field3, field4), 0) > $join["Distance"] * 2

Ejemplos de operadores lógicos

Además de los operadores condicionales, se pueden utilizar operadores lógicos más avanzados para crear expresiones, como se muestra en la siguiente tabla. Para obtener más información sobre las funciones lógicas de Arcade, consulte Funciones lógicas.

Función

Explicación

Ejemplo

Resultado

iif(<condition>,<true value>,<false value>)

Devuelve un valor si una condición es true, y devuelve otro valor si esa condición es false.

<true value> y <false value> pueden ser lo siguiente:

  • Un campo numérico. Si hay un espacio en el nombre del campo, use corchetes.
  • Un número.
  • Una función.

iif($feature["field1"] > $feature["field2"], $feature["field1"], 0)

iif($feature["field1"] > $feature["field2"], iif($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0)

Devuelve field1 si field1 es mayor que field2 y 0 en los demás casos.

Devuelve el resultado de la segunda función iif si filed1 es mayor que field2, y 0 en los demás casos.

when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)

Evalúa una serie de expresiones en orden hasta que una es true.

  • expression: una expresión.
  • result: el resultado de la expresión. Puede ser un número o un campo.
  • default: valor opcional si no coincide ninguna de las expresiones.

when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"])

Si field1 + 10 es mayor que 1, devuelve 1. En caso contrario, comprueba si field2 + 10 es mayor que 2. Si es así, devuelve 2. Si no, devuelve field3.

decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> )

Evalúa una expresión y compara su valor con los parámetros siguientes. Si la expresión coincide, devuelve el valor del siguiente parámetro. Si ninguno coincide, existe la opción de que el último parámetro sea un valor de devolución predeterminado.

  • conditional val: el valor condicional. Puede ser un campo o una expresión.
  • case: un valor para compararlo con el valor condicional.
  • result: el resultado si el caso correspondiente coincide con el valor condicional.
  • defaultValue: un valor opcional si ningún otro valor es true.

decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0)

Compara la igualdad entre el valor condicional field1 + 3 y case1 field1. Si es true, devuelve 1. Si es false, compara la igualdad entre field1 + 3 y field2. Si es true, devuelve 2; de lo contrario, devuelve 0.