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 tipos de feed y tipos de fuente 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 utilizan 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. Las expresiones que utilizan valores de atributos de entidades se pueden crear 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 Date() de Arcade. Para obtener más información, consulte las funciones de fecha en la documentación de 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.

- Esto muestra los campos o variables relacionados con esa variable.

- 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.
- 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 de 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.

- Ajuste el valor muestreado si se utiliza en pruebas y evaluaciones de expresiones de Arcade.

- Haga clic en Ejecutar en el cuadro de diálogo Configurar una expresión de Arcade para la expresión de Arcade. La expresión se evalúa 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 tanto, se deben crear expresiones matemáticas de Arcade en 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.
Más información sobre las operaciones matemáticas en Arcade
| Operador | Sintaxis | Explicación | Ejemplo | Resultado |
|---|---|---|---|---|
Adición | a + b | a más b. | fieldname contiene un valor de 1,5 $target["fieldname"] + 2.5 | 4.0 |
Resta | a - b | a menos b. | fieldname contiene un valor de 3,3 $target["fieldname"]- 2.2 | 1.1 |
Multiplicación | a * b | a por b. | fieldname contiene un valor de 2,0 $join["fieldname"] * 2.2 | 4.4 |
División | a / b | a dividido por b. | fieldname contiene un valor de 4,0 $join["fieldname"] / 1.25 | 3.2 |
Valor absoluto | abs( a ) | Devuelve el valor absoluto (positivo) de a. | fieldname contiene un valor de -1,5 abs($target["fieldname"]) | 1.5 |
Logaritmo | log( a ) | Devuelve el logaritmo natural (base e) de a. | fieldname contiene un valor de 1 log($join["fieldname"]) | 0 |
Seno | 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 |
Coseno | 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 |
Tangente | 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 |
Raíz cuadrada | sqrt( a ) | Devuelve la raíz cuadrada de a. | fieldname contiene un valor de 9 sqrt($join["fieldname"]) | 3 |
Mínimo | min( a, b ) | Devuelve el número entre a y b con el valor más bajo. | fieldname contiene un valor de 1,5 y un valor de -3 min($join["fieldname"], -3) | -3 |
Máximo | max( a, b ) | Devuelve el número entre a y b con el valor más alto. | fieldname1 contiene un valor de 1,5 y fieldname2 contiene un valor de -3 max($target["fieldname1"], $join["fieldname2"]) | 1.5 |
Restricción | 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 el valor de distance es menor que 0; 10 si el valor de distancce es mayor que 10; y el valor de 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.
Más información sobre las funciones de texto de Arcade
| Función | Sintaxis | Explicación | Ejemplo | Resultado |
|---|---|---|---|---|
Concatenación | concatenate(<values>, <separator>) | Concatena valores juntos y devuelve una cadena de caracteres.
| fieldname contiene un valor de Velocity concatenate([$target["fieldname"], "is", "great!"], ' ') | Velocity es excelente. |
Buscar | find(<searchText>, <text>, <startPos>) | Busca una cadena de caracteres en otra cadena de caracteres. Los comodines no se admiten.
| fieldname1 contiene un valor de 14NorthStreet y fieldname2 contiene un valor de North find($target["fieldname2"], $join["fieldname1"]) | 2 |
Minúscula | lower(<value>) | Forma una cadena de caracteres en minúscula.
| fieldname contiene un valor de ANALYTICS lower($join["fieldname"]) | análisis |
Puede combinar funciones de texto para realizar una operación compleja. El siguiente ejemplo de función de texto utiliza las funciones find y lower:
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.); los minutos y segundos entre 0 y 59; y las milésimas de segundo entre 0 y 999.
La siguiente tabla contiene una muestra de las operaciones disponibles:
Más información sobre las funciones de fecha de Arcade
| Función | Sintaxis | Explicación | Ejemplo | Resultado |
|---|---|---|---|---|
Creación de fecha | date( <value>, <month>, <day>, <hour>, <minute>) | Analiza un valor o conjunto de valores en una cadena de caracteres de fecha.
| 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 |
Diferencia de fecha | DateDiff(<date1>, <date2>, <units>) | Resta dos fechas y devuelve la diferencia en las unidades especificadas.
| Ejemplo 1: DateDiff(Date(2017,1,14,0), Date()) Ejemplo 2: DateDiff(Date(2017,1,14,0), Date(), "Years") | El resultado varía dependiendo de cuándo se ejecute el comando. Ejemplo 1: -20532129137 Ejemplo 2: -0,6546783768647119 |
Año | Year(<dateValue>) | Devuelve el año de la fecha dada.
| 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 | Sintaxis | Explicación | Ejemplo | Resultados |
|---|---|---|---|---|
Relacional o Comparación | 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 | |
OR lógico | <condition1> || <condition2> | Se cumplen la condición 1 o la condición 2. | (abs(-5) == 5) || (10 < 2) | True |
Or lógico | <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 avanzados para crear expresiones. La siguiente tabla incluye ejemplos:
Más información sobre funciones lógicas de Arcade
| Función | Sintaxis | Explicación | Ejemplo | Resultado |
|---|---|---|---|---|
IIf | 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:
| 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. |
Cuándo | when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>) | Evalúa una serie de expresiones en orden hasta que una es true.
| 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 | 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.
| 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. |