Contar entididades duplicadas en una tabla de atributos con arcade

2828
23
Jump to solution
12-05-2019 09:05 AM
usuarioredes
New Contributor III

Estimados, junto con saludar, me gustaría que me ayudaran a crear un script en arcade que me cuente la cantidad de números duplicados que hay en x columna.

23 Replies
XanderBakker
Esri Esteemed Contributor

Hola usuario.redes_aguasnuevas , 

Tengo un error en la linea 14 donde dice "resulado" en vez de "resultado".

0 Kudos
XanderBakker
Esri Esteemed Contributor

0 Kudos
usuarioredes
New Contributor III

Excelente Xander, ahora me funciono.

Para asignarle un color a cada estado para que se pueda apreciar visualmente la concentración como lo podría hacer Xander, intente buscar el campo encuestas en los atributos pero no lo encontré.

0 Kudos
XanderBakker
Esri Esteemed Contributor

Hola usuario redes , 

Es posible definir los colores en la ventana emergente, pero esto requiere una visualización personalizada en HTML y multiples expresiones (aunque éstas van a ser muy similares). Te puedo mander un ejemplo mañana. Estoy en presentaciones todo el día, pero puedo proveer algo mañana por la mañana (hora Colombiana).

0 Kudos
usuarioredes
New Contributor III

Hola Xander, te lo agradecería mucho ya que mi objetivo es poder localizar geográficamente los activos por tipo de estado y a este asignarle un color en base a su criticidad. 

Gracias Xander.

Saludos. 

0 Kudos
XanderBakker
Esri Esteemed Contributor

Hola usuario redes , 

Te voy a compartir un ejemplo muy sencillo para explicar el concepto.

Primero se pueden definir 2 expresiones de Arcade muy similares:

Texto Cantidad:

var cantidad = Count(Filter($layer, "ID_activo = " + $feature["ID_activo"]));

var resultado = "";
If (cantidad == 1) {
    resultado = "No critico (1)";
} else if (cantidad == 2) {
    resultado = "Semicritico (2)";
} else if (cantidad == 3) {
    resultado = "Critico (3)";
} else if (cantidad > 3) {
    resultado = "Grave (" + cantidad + ")";
} else {
    resultado = "Sin encuestas";
}

return resultado;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

y Color:

var cantidad = Count(Filter($layer, "ID_activo = " + $feature["ID_activo"]));

var resultado = "#FFFFFF";
If (cantidad == 1) {
    resultado = "#948B54";
} else if (cantidad == 2) {
    resultado = "#568CD6";
} else if (cantidad == 3) {
    resultado = "#94CF4F";
} else if (cantidad > 3) {
    resultado = "#F60400";
} else {
    resultado = "#FFFFFF";
}

return resultado;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Luego se debe entrar a la configuración de la ventana emergente, cambiando la visualización a "Una Visualización de atributo personalizado" y oprimir "CONFIGURAR":

En la ventana de configuración cambiar a HTML:

Luego pegar el siguiente código HTML (expr1 hace referencia a la expresión del color y expr0 al texto😞

<table>
  <tbody>
    <tr>
      <td bgcolor="#F7F7F7" width="60px">Estado</td>
      <td align="center" bgcolor="{expression/expr1}" width="120px">{expression/expr0}</td>
    </tr>
  </tbody>
</table>

El resultado se va ver así:

usuarioredes
New Contributor III

Hola Xander, gracias por responder.

Me ha funcionado muy bien el script, pero no logro encontrar la forma de que el objeto me cambie al color asignado, ósea el activo que se encuentra en estado Semicritico se le asigno el color azul, donde el objeto debería marcarse de color azul, en la foto de abajo se describe.

quizás estoy haciendo algo mal?

0 Kudos
XanderBakker
Esri Esteemed Contributor

Hola usuario.redes_aguasnuevas ,

Como mencioné en el comienzo el simbolo no se puede cambiar con base en el número de encuestas. Solamente haciendo un cáclulo de un campo nuevo lo permite, pero será necesario repetir este cáculo para incluir los cambios.

0 Kudos
usuarioredes
New Contributor III

Ahora entiendo Xander, este código me servirá para otro proceso que tengo.

Para realizar el calculo y asignarle un color a un campo nuevo en la tabla de atributos que script debería ocupar Xander.

Estoy pensando en esta solución donde tendría que actualizar cada 7 días.

Me podrías ayudar Xander.

0 Kudos
XanderBakker
Esri Esteemed Contributor

Hola usuario.redes_aguasnuevas ,

Para el cálculo se puede usar la siguiente expresión:

var cantidad = Count(Filter($layer, "ID_activo = " + $feature["ID_activo"]));

var resultado = "";
If (cantidad == 1) {
    resultado = "No critico";
} else if (cantidad == 2) {
    resultado = "Semicritico";
} else if (cantidad == 3) {
    resultado = "Critico";
} else if (cantidad > 3) {
    resultado = "Grave";
} else {
    resultado = "Sin encuestas";
}
return resultado;

El resultado genere los clases de criticidad que pueden ser usados para la visualización de los puntos. 

0 Kudos