8 votos

Atributo múltiple cálculos de la Tabla de atributos En ArcGIS

Tengo una hoja de cálculo existente desarrollado para el seguimiento específico de un hidrante contra incendios de datos, este se actualiza periódicamente y se unió a la distribución espacial de la boca de riego de datos en ArcGIS. En la hoja de cálculo hay un número de columnas para introducir los datos relacionados con la Presión Estática, Presión Residual, y la Tasa de Flujo.

enter image description here

La utilización de la Capacidad Nominal en 20 PSI en un Fuego de Prueba de Flujo de la fórmula para calcular el flujo del fuego, la hoja de cálculo calcula automáticamente. El cálculo es como sigue.

Fire Flow = Flow * ((Static - 20)/(Static - Residual))^0.54

No estoy seguro de que la mejor manera de atacar este y estoy buscando sugerencias. Con base en los resultados del cálculo, tengo una columna adicional con una sentencia IF que indica el adecuado flujo del fuego de color el hidrante debe ser pintado. Para aquellos que no saben, la toma de agua de color es un indicador de que personal de bomberos en caso de emergencia, el fuego de las condiciones de flujo. I hav e hecho algunas investigaciones y desarrollado la siguiente secuencia de comandos de python:

def Reclass !Bon_Color!:
     if ( !Fire_Flow! <= 0):
       return Black
     elif ( !Fire_Flow! >= 1 and !Fire_Flow! <= 499):
       return  Red
     elif ([Fire_Flow] > 499 and [Fire_Flow] <= 999):
       return Orange
     elif ( !Fire_Flow! > 999 and !Fire_Flow! <= 1499):
         return Green
     elif ( !Fire_Flow! > 1499):
         return Blue
  end if

Me gustaría saber si los cálculos mencionados anteriormente, se utiliza en la hoja de cálculo de Excel podría ser replicado en la base de datos de la tabla de atributos de la utilización de la calculadora de campo y el python-analizador? En lugar de confiar en la hoja de cálculo Excel y la necesidad de volver a unir los datos.

4voto

David L Morris Puntos 917

El código de python tiene sentido, pero tiene un par de errores. Pega esto en el "Pre-lógica de código de secuencia de comandos" en la casilla en el campo de la calculadora:

def Reclass (fire_flow):
     if (fire_flow <= 0):
       return "Black"
     elif (fire_flow >= 1 and fire_flow <= 499):
       return "Red"
     elif (fire_flow > 499 and fire_flow <= 999):
       return "Orange"
     elif (fire_flow > 999 and fire_flow <= 1499):
       return "Green"
     elif (fire_flow > 1499):
       return "Blue"

A continuación, en el cuadro de abajo que, pegar:

Reclass (!Fire_Flow!)

La sangría en que el bloque superior es un poco inusual, pero la cantidad exacta de la sangría no importa el tiempo que las líneas están sangría correctamente con relación a la otra.

Los errores:

def Reclass !Bon_Color!:

Cuando se define una función, es necesario seguir con una lista de parámetros de la función se utiliza para realizar su trabajo. La lista debe estar entre paréntesis. En su caso sólo está utilizando un parámetro de entrada, su Fire_Flow número.

if ( !Fire_Flow! <= 0):
   return Black

Usted va a pasar !Fire_Flow! en la función, una vez que estás en la función de ese valor se asigna a la variable fire_flow, por lo que se refieren a que la variable de lugar. También, usted necesita para poner el Black en las comillas, por lo que una cadena se devuelve. La forma en que tienes aquí, el guión está buscando un nombre de variable Black a devolver, y que no existe.

end if

Usted no necesita final si en Python.

Para su primer campo, el fuego de flujo de número, nombre de sus campos de manera adecuada y el operador para los exponentes en Python es **, no ^.pega esto en el cuadro de abajo en el campo de la calculadora:

!Fire_Flow! = !Flow! * ((!Static! - 20)/(!Static! - !Residual!))**0.54

Si necesita actualizar más de un campo de forma simultánea, estoy de acuerdo con MacroZED que una actualización del cursor es la mejor manera, pero eso puede ser un poco confuso si usted es nuevo en Python.

2voto

MacroZED Puntos 294

Esto puede sin duda ser hecho en ArcGIS sin la necesidad de que en excel. Si estos campos (Presión Estática, Presión Residual, y la Tasa de Flujo) ya están en un conjunto de datos, entonces podemos utilizar la siguiente cursores para añadir los nuevos campos y actualización de ellos:

import arcpy

ds = r"path/to/dataset"    

with arcpy.da.UpdateCursor(ds, ["Fire_Flow", "Colour"]) as ucursor:
    with arcpy.da.SearchCursor(ds, ["Static", "Residual", "Flow", "Fire_Flow"]) as scursor:
        for urow in ucursor:
             for srow in scursor:
                 urow[0] = "{}" * (("{}"-20)/("{}"-"{}"))**0.54.format(srow[2], srow[0], srow[0], srow[1])
                 ucursor.updateRow(urow)
                 if srow[3] <= 0:
                     urow[1] = "Black"
                     if srow[3] >= 1 and srow[3] <= 499:
                         urow[1] = "Red"
                         if srow[3] > 499 and srow[3] <= 999:
                             urow[1] = "Orange"
                             if srow[3] > 999 and srow[3] <= 1499:
                                 urow[1] = "Green"
                                 if srow[3] > 1499:
                                     urow[1] = "Blue"
                                     ucursor.updateRow(urow)

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