Mini Tutoriales | ArcGIS Online
Cómo utilizar Smartforms en WebMap: Caso aplicado al avistamiento de aves
Por: Marta Pęgiel - GeoSpatial Analyst
Los Smart Forms o formularios inteligentes son formularios que utilizan lógica y ciertos criterios para mejorar la experiencia del usuario y la eficiencia en la recopilación de datos. Estos formularios son flexibles, con capacidad de mostrar u ocultar campos basados en las respuestas del usuario o automatizando el llenado de campos a través de las intersecciones del punto recolectado.
En este minitutorial, aprenderás a crear formularios en un WebMap para una capa de Avistamiento de Aves. Te mostraré cómo calcular automáticamente el mes de recolección de datos y cómo obtener el nombre y uso de suelo del territorio por intersección con un buffer cercano al punto mediante lenguaje Arcade.
Para utilizar Smart Forms de Esri, se necesita como mínimo un tipo de usuario Creator o superior, con una licencia de ArcGIS Pro que incluya la funcionalidad de edición.
Paso 1: Crear WebMap
Crea WebMap con capas necesarias, en mi caso son dos capas con datos ficticios para simular áreas de la ciudad de Valdivia (capa de polígono) y la capa de puntos que representará los avistamientos de aves, ambas capas tienen habilitados los campos de GlobalID.
Paso 2: Configurar los formularios
Configura formularios en la capa Avistamiento Aves seleccionando la capa, dirígete al costado derecho de la pantalla y busca el menú Configurar Edición -> Formularios.
Paso 3: Arrastrar los campos
Arrastra todos los campos que deseas visualizar en el formulario desde la derecha, al panel ubicado a la izquierda. En mi caso dispongo de cuatro campos para la capa de avistamientos: Tipo ave, mes, tipo uso y territorio, pero solo el primero de ellos será rellenado por el usuario, el resto de los campos será auto calculado.
Paso 4: Creación del cálculo automático
Para crear cualquier cálculo automático, es necesario seleccionar el campo que se requiere calcular, dirigirse al borde inferior derecho en el menú de Lógica y presionar la tuerquita que se encuentra al lado de “Expresión calculada”.
5: Crear una nueva expresión
Crearé una nueva expresión para el campo mes, una función en Arcade que rescata el mes del momento en el que se crea el registro (now()), le sumo un 1 debido a que la función rescata el mes desde la fecha, sin embargo, reconoce enero como mes 0, febrero como mes 1 y así sigue. En mi dominio tengo descrito el mes 1 como enero, por lo que le sumo un 1 para que concuerde con la lógica del dominio. Para guardar y salir, presiono el botón Listo.
6: Campos de uso y territorio
Para los campos tipo uso y territorio, se utilizará la misma expresión, pero con un pequeño cambio. ¿Qué es lo que se quiere obtener aquí?
Requiero extraer atributos de la capa de polígonos hacia la capa de puntos, pero no solo por intersección directa, sino también considerando una distancia de 200 metros alrededor de cada avistamiento. Solución perfecta cuando estás cercano a la orilla del río y quieres asociar los datos del polígono a tus registros.
Con la ayuda de la siguiente expresión en Arcade defino como variable la CAPACONSULTA, que será el polígono que queremos consultar; en la variable CAPAPUNTO, se define la distancia y la unidad en la que se requiere el cálculo del buffer.
Posteriormente la expresión estará comparando las distancias entre ambas capas y traerá el campo que deseo copiar a mi capa de avistamiento, que en este caso será tipo, que corresponde al tipo de uso. Presiono el botón Listo para salir.
var CAPACONSULTA = FeatureSetByName($map,"Uso suelo") var CAPAPUNTO = Buffer($feature, 200, 'meter') var CRUCE = Intersects(CAPACONSULTA, CAPAPUNTO) var featuresWithDistances = [] for (var f in CRUCE) { Push(featuresWithDistances, { 'distance': Distance($feature, f, 'meter'), 'feature': f } ) } function sortByDistance(a, b) { return a['distance'] - b['distance'] } var sorted = Sort(featuresWithDistances, sortByDistance) var closestFeatureWithDistance = First(sorted) if (IsEmpty(closestFeatureWithDistance)) { return null } return `${closestFeatureWithDistance['feature']['tipo']}` |
7: Creación de nueva expresión para el campo territorio
Procedo a crear una nueva expresión para el campo Territorio. Selecciono el campo. Para eso, me dirijo al borde inferior derecho y presiono el ícono de tuerca.
Copio la misma expresión que en el paso 6, pero en vez de tipo, utilizo el campo territorio en la último línea del código para que me traiga los nombres del territorio asociado.
var CAPACONSULTA = FeatureSetByName($map,"Uso suelo") var CAPAPUNTO = Buffer($feature, 200, 'meter') var CRUCE = Intersects(CAPACONSULTA, CAPAPUNTO) var featuresWithDistances = [] for (var f in CRUCE) { Push(featuresWithDistances, { 'distance': Distance($feature, f, 'meter'), 'feature': f } ) } function sortByDistance(a, b) { return a['distance'] - b['distance'] } var sorted = Sort(featuresWithDistances, sortByDistance) var closestFeatureWithDistance = First(sorted) if (IsEmpty(closestFeatureWithDistance)) { return null } return `${closestFeatureWithDistance['feature']['territorio']}` |
8: Guardar
Para guardar todos los formularios, presiona el botón aceptar. Luego guarda el WebMap para que los cambios se vean reflejados. A partir de este momento, podrá crear puntos de avistamiento.
Al crear un punto de avistamiento, el formulario sólo te permitirá ingresar el tipo de ave. Los demás datos serán calculados de manera automática.
Este tutorial también aplica dentro de FieldMaps.
Video Tutorial
Revisa más de nuestros mini tutoriales en esta página.