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.
- 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 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 de muestra si se utiliza en la prueba y evaluación 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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:
| 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.
| 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.
| 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. |