1 votos

ArcGIS Pro arcade if else declaraciones

Se me ha encomendado la tarea de clasificar los códigos de zonificación, que son más de 100, en sólo 5 (Residencial, Oficina, Comercial, Industrial y Varios).

Por la razón que sea, no consigo que Arcade reconozca un atributo de texto que no sea el de las dos primeras afirmaciones.

ArcGIS Pro Calculate Field in Arcade with If Else Statement

He probado lo siguiente sin éxito:

if ($feature.ZONE == "C-1"){     
    $feature.ZONE1; 'Commercial'}
else $feature.ZONE1; 'Miscellaneous'

Quiero que cualquier campo que contenga el valor "C-" o "CB-" sea comercial, "I-" sea Industrial, "R-" residencial y "Misc" todo lo demás.

var zone = $feature.ZONE;

if (find('C-', zone,0)>0) {

return 'Commercial'
};

if (find('O-', zone,0)>0) {
return 'Office'

};
if (find(['R-',"X-","SH","SR"], zone,0)>0) {
return 'Residential'

};
else {
return 'Misc'
};

¿Estoy usando la herramienta de procesamiento equivocada?

1voto

eddienull Puntos 1

He encontrado una forma de ordenar los códigos de Zonificación. Me pareció una forma muy tediosa de hacer el script, pero funcionó. Yo estaba esperando una manera de combinar las variables a una línea.

    var zone = $feature.ZONE;

    if (zone == 'C-1') {
    return 'Commercial'
    }
    else if (zone == 'C-2') {
    return 'Commercial'
    }
    else if (zone == 'C-3') {
    return 'Commercial'
    }
    else if (zone == 'CB-1') {
    return 'Commercial'
    }

    else {
    return 'Misc'
    }

1voto

Andrey Arapov Puntos 31

Casi todos los idiomas, si no todos, tienen una construcción para manejar este tipo de situaciones mejor que las grandes else-if declaraciones. Para Arcade, es el When declaración:

Cuando

When(expresión1, resultado1, [expresión2, resultado2, ..., expresiónN, resultadoN]?, defaultValue) -> Cualquier

Evalúa una serie de expresiones condicionales hasta que una de ellas sea verdadera.

Como Arcade es un lenguaje joven, sigue evolucionando con nuevos libera que ocurre cada pocos meses en promedio. Lo señalo porque es realmente importante indicar qué versión de ArcGIS y del software Arcade se está utilizando, ya que el código escrito con las funciones más nuevas no se ejecutará en las versiones más antiguas.

// Using original Arcade functions
var zone_codes = [
    "C-3", "C-1", "C-2", "R-3", "0-3", "C-2", "CB-1", "I-1"
];

var zone_groups = [];
for(var i in zone_codes) {
    var z = Split(zone_codes[i], "-", -1)[0];
    zone_groups[i] = When(
        IndexOf(["C", "CB"], z) > -1, "Commercial",
        IndexOf(["I"], z) > -1, "Industrial",
        IndexOf(["R"], z) > -1, "Residential",
        "Miscellaneous"
    );
    z = "";
};
return zone_groups;

// Using newer Arcade (1.12+) functions
var zone_codes = [
    "C-3", "C-1", "C-2", "R-3", "0-3", "C-2", "CB-1", "I-1"
];
var zone_groups = [];

for(var i in zone_codes) {
    var z = Split(zone_codes[i], "-", -1)[0];
    Push(zone_groups, When(
        Includes(["C", "CB"], z), "Commercial",
        Includes(["I"], z), "Industrial",
        Includes(["R"], z), "Residential",
        "Miscellaneous"
    ));
    z = "";
};
return zone_groups;

Devuelve ["Commercial","Commercial","Commercial","Residential","Miscellaneous","Commercial","Commercial","Industrial"]

0voto

user75532 Puntos 11

Post antiguo... Pero en mi pequeña prueba el operador lógico OR || funciona. https://developers.arcgis.com/arcade/guide/logic/#operators

var line = $feature.FeatureCategory

if (line == "Shrub" || line == "Timber Shrub") {
return "Shrub"}
else {
return "Timber"}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X