Con el lenguaje de secuencias de comandos Arcade, puede escribir expresiones utilizando uno o varios campos de los datos para modificar o especificar la apariencia de la simbología de entidades.
Una expresión puede ser una sola línea de código o varias líneas de código. Las expresiones se pueden crear o importar y modificar en el cuadro de diálogo Constructor de expresiones. Si cambian los atributos de una entidad, actualice los valores de la simbología seleccionando Actualizar valores en el menú desplegable Más del panel Simbología.
Nota:
La simbología de símbolo único y de gráfico no admite el uso de expresiones de Arcade.
Aplicar una expresión al campo de simbología de una capa de entidades
Para aplicar una expresión al campo de simbología de una capa de entidades, haga lo siguiente:
- Elija una capa de entidades en el panel Contenido, si es necesario.
- En la pestaña Capa de entidades, en el grupo Dibujo, haga clic en Simbología para abrir el panel Simbología, si aún no está abierto.
- Seleccione una simbología principal.
- Junto al menú desplegable Campo, haga clic en el botón Establecer una expresión .
- En el cuadro de diálogo Constructor de expresiones, haga lo siguiente:
- Opcionalmente, agregue texto de Título para la expresión personalizada.
- En Campos, haga doble clic en el nombre de un campo para agregarlo a la expresión. Si el número de campos de los datos es elevado, haga clic en el botón Avanzado para filtrar la lista y buscar el campo que necesita.
- En Funciones, consulte la biblioteca de funciones matemáticas, de texto y basadas en fechas. Haga clic en el botón Tipo de auxiliar para filtrar la lista de funciones y haga doble clic en una función para agregarla a la expresión.
- Si se selecciona un campo, haga clic en el menú desplegable Insertar valores para examinar y agregar valores específicos a la expresión.
- En Expresión, escriba una expresión personalizada usando la sintaxis del lenguaje Arcade.
Precaución:
Si simboliza un campo cuyo nombre contiene caracteres especiales o que comienza por un número, Arcade utiliza el mismo formato que la sintaxis de campo unido, por ejemplo, $feature['33field'], $feature['acres²'] y $feature['st_area(SHAPE)'].
- Haga clic en Verificar para validar la expresión.
Los mensajes de error de validación proporcionan indicaciones si la expresión no es válida. También puede hacer clic en Importar para importar o hacer clic en Exportar para exportar expresiones fuera de ArcGIS Pro.
- Haga clic en Aceptar para definir la expresión del campo.
La simbología se actualiza para reflejar los cambios.
Si se utiliza una expresión personalizada para la simbología, el título de la expresión se muestra en el panel Contenido y en el menú desplegable Campo. Las expresiones se guardan siempre y cuando la simbología principal de la capa siga siendo la misma.
Conceptos básicos de las expresiones de simbología
Al definir la simbología con una expresión se da por hecho que está familiarizado con Arcade. Arcade proporciona una funcionalidad coherente en todo el software de ArcGIS. Aquí se incluyen ArcGIS Pro, ArcGIS API for JavaScript y otras aplicaciones relacionadas.
Las expresiones de simbología Arcade utilizan el perfil de visualización. Cada perfil tiene un conjunto definido de variables globales (perfil). Esta opción contextualiza las variables de la expresión y los valores devueltos. Las expresiones de extrusión también utilizan el perfil de visualización. Para obtener más información, consulte Visualización.
Las expresiones simples contienen una definición del valor de campo y una operación matemática. Por ejemplo, puede utilizar la variable global $feature para hacer referencia a un campo de la tabla de atributos de la capa de entidades, como la población de una región en 2020, y restarle el total de población de 2010 para determinar la diferencia. El valor resultante de la expresión se devuelve y se utiliza para determinar el símbolo de la entidad.
$feature.2020POP - $feature.2010POP
Las expresiones más complejas pueden usar variables y abarcar varias líneas de código. Por ejemplo, puede establecer una variable para representar la diferencia entre la hora actual y una fecha representada en un campo.
var days_from_today = DateDiff(Now(), date_field, “days”);
Variables del perfil de visualización
El cuadro de diálogo Constructor de expresiones al que se accede desde el panel Simbología utiliza exclusivamente Arcade para proporcionar coherencia entre mapas, proyectos y otras aplicaciones. La documentación de Arcade proporciona información adicional.
La variable global $view.scale de Arcade hace referencia a la escala actual de la vista (mapa, escena o diseño). Si establece una variable en $view.scale como parte de una expresión de simbología, la simbología puede cambiar dependiendo de la escala actual de la vista. A continuación se muestra un ejemplo introductorio.
var mapscale = $view.scale; var weight = $feature.STROKEWGHT; var size; var normal = 1000000; size = normal/mapscale*weight return size
En esta expresión, la variable mapscale se crea para almacenar el valor de escala. La expresión multiplica la escala por el trazo weight, derivado de un valor del campo STROKEWGHT, y divide este producto por un valor personalizado normal. El resultado cambia el peso del trazo de los símbolos al acercar y alejar la vista. Esto resulta útil como alternativa a la escala de clase de símbolo.
- La variable global $view.timeProperties permite que los ajustes del control deslizante de tiempo sean accesibles cuando se activa un control deslizante de tiempo en el mapa. Las expresiones que utilicen la variable deben tener en cuenta las situaciones en las que el control deslizante de tiempo no esté activado. La siguiente salida de muestra, que comienza con una sentencia HasKey, comprueba la presencia del control deslizante de tiempo en la $view. Si devuelve el valor True, se lee la sentencia else.
if (HasKey($view, 'timeProperties') == false || $view.timeProperties.currentEnd == null) return -1 else return ( DateDiff($view.timeProperties.currentEnd, $view.timeProperties.currentStart, 'days') - DateDiff($view.timeProperties.currentEnd, $feature.Date_time, 'days') )
La variable global $feature hace referencia a un campo de la capa de entidades para la simbología.
Sugerencia:
Si el nombre de campo contiene un carácter al que no se puede acceder con notación de punto, coloque el nombre entre corchetes, por ejemplo, $feature.["joinKey.fieldName"].
Ejemplos de perfiles de visualización
Los siguientes ejemplos de perfiles incluyen cómo conseguir ciertos tipos de simbología mediante las variables disponibles.
Crear clases de simbología
En la mayoría de los casos, puede configurar manualmente la capa para que utilice simbología de símbolos graduados o colores graduados. Sin embargo, si hace referencia a información de otra fuente que cambia con frecuencia (por ejemplo, el precio medio nacional de un servicio), debe actualizar o restablecer la configuración de simbología cada vez. Para evitarlo, puede establecer una expresión para realizar cálculos y utilizar los resultados con un método de clasificación existente. var stationID = $feature.stationID; //ID number for gas station
var stationPrice = $feature.stationPrice; //Price at gas station
var avgPrice = '4.164' //National average price of gas
var priceDiffUL = Round(avgPrice - stationPrice, 2); //Calculate the difference
return priceDiffUL;
Este ejemplo determina el valor resultante de dos campos, stationID y stationPrice.
Clasificar valores únicos
Puede escribir una expresión personalizada para crear simbología de valores únicos, especialmente si los valores están bien definidos y la simbología se utiliza en varios proyectos. La mayoría de expresiones escritas para la simbología de valores únicos asignan variables a las clases y aplican funciones lógicas if-else o when para definir las etiquetas de clase de símbolo. En el ejemplo siguiente, el valor único devuelto depende de si es miembro del conjunto de ejemplo.var example_array = [1, 2, 3, 4];
if (IndexOf(example_array, $feature.VALUE) > -1) {
return “Value is 1, 2, 3 or 4”;
} else {
return “Other value”;
}
En otro ejemplo, los valores se agrupan en función de la escala de tornado Fujita mejorada. Este ejemplo es similar al ejemplo anterior de simbología basada en escala, pero esta expresión no utiliza la variable $view.scale.var WindSpeed = $feature.WINDSPEED
when (
WindSpeed > 261, “F5”,
WindSpeed > 207, “F4”,
WindSpeed > 158, “F3”,
WindSpeed > 113, “F2”,
WindSpeed > 73, “F1”,
“F0”
)
Simbología basada en escala
En el primer ejemplo, la variable vs almacena el valor de escala actual. La variable wind almacena el valor de velocidad del viento de la entidad, que se utiliza para determinar el tamaño exacto del símbolo. Este valor se almacena como windSize, que después se cambia de tamaño en función de la escala del mapa.
var vs = $view.scale
var wind = $feature.WINDSPEED
var windSize = When(
wind > 136, 24, //Category 5
wind > 112, 23, //Category 4
wind > 95, 22, //Category 3
wind > 82, 21, //Category 2
wind > 63, 20, //Category 1
wind > 33, 18, //Tropical Storm
16) //Tropical Depression
when(
vs >=37000000, windSize,
vs >=18500000, 1 + windSize,
vs >=9300000, 2 + windSize,
vs >=4700000, 4 + windSize,
vs >=2000000, 6 + windSize, 8 + windSize)
El segundo ejemplo simboliza la entidad del campo EXAMPLE solo cuando la escala actual es mayor que 1:30000.
Var scale = $view.scale
var feature = $feature.EXAMPLE
if(scale > 30000 && feature == 10){
return 'Feature equals 10'
}
return 'Feature is not equal to 10'
Las expresiones personalizadas proporcionan una forma flexible de medir y ajustar dinámicamente la escala de la simbología, especialmente si los símbolos no se basan en una plantilla. Para obtener más información, consulte Tamaño de símbolos basados en escala.