J'ai une feuille de calcul Excel existante développée pour suivre les données spécifiques des bornes d'incendie, elle est périodiquement mise à jour et jointe aux données spatiales des bornes d'incendie dans ArcGIS. Dans la feuille de calcul, il existe un certain nombre de colonnes pour saisir des données relatives à la pression statique, à la pression résiduelle et au débit.
En utilisant la capacité nominale à 20 PSI dans une formule de test de débit d'incendie pour calculer le débit d'incendie, le tableur calcule automatiquement. Le calcul est le suivant.
Fire Flow = Flow * ((Static - 20)/(Static - Residual))^0.54
Je ne suis pas sûr de la meilleure façon d'attaquer cela et je recherche des suggestions. Sur la base des résultats du calcul, j'ai une colonne supplémentaire avec une déclaration IF qui indique la couleur appropriée du flux d'incendie à laquelle la borne devrait être peinte. Pour ceux qui ne le savent pas, la couleur de la bouche d'incendie est un indicateur pour incendier le personnel en cas d'urgence les conditions d'écoulement du feu. J'ai fait quelques recherches et développé le script python suivant:
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
Je voudrais savoir si les calculs mentionnés ci-dessus, utilisés dans la feuille de calcul Excel, pourraient être répliqués dans la table attributaire de la base de données en utilisant la calculatrice de champ et l'analyseur python? Plutôt que de se fier à la feuille de calcul Excel et à la nécessité de rejoindre les données.
Réponses:
Votre code python est logique mais contient quelques erreurs. Collez-le dans la case "Code de script pré-logique" dans la calculatrice de champ:
Ensuite, dans la case en dessous, collez:
L'indentation dans ce bloc supérieur est un peu inhabituelle, mais la quantité exacte d'indentation n'a pas d'importance tant que les lignes sont correctement indentées les unes par rapport aux autres.
Les erreurs:
Lorsque vous définissez une fonction, vous devez la suivre avec une liste de paramètres que la fonction utilise pour effectuer son travail. La liste doit être entre parenthèses. Dans votre cas, vous n'utilisez qu'un seul paramètre d'entrée, votre numéro Fire_Flow.
Vous allez passer
!Fire_Flow!
dans la fonction, une fois que vous êtes dans la fonction, cette valeur est affectée à la variablefire_flow
, alors faites plutôt référence à cette variable. De plus, vous devez mettre desBlack
guillemets, donc une chaîne est retournée. De la façon dont vous l'avez ici, votre script recherche une variable nomméeBlack
à renvoyer, et elle n'existe pas.Vous n'avez pas besoin de terminer si vous êtes en Python.
Pour votre premier champ, le numéro de flux d'incendie, vous devez nommer vos champs de manière appropriée et l'opérateur des exposants en Python n'est
**
pas.^
Collez-le dans la case du bas de la calculatrice de champ:Si vous devez mettre à jour plusieurs champs simultanément, je suis d'accord avec MacroZED qu'un curseur de mise à jour est la meilleure façon, mais ceux-ci peuvent être un peu déroutants si vous êtes nouveau sur Python.
la source
Cela peut certainement être fait dans ArcGIS sans avoir besoin d'exceller. Si ces champs (pression statique, pression résiduelle et débit) sont déjà dans un ensemble de données, nous pouvons utiliser les curseurs suivants pour ajouter les nouveaux champs et les mettre à jour:
la source