Suite

Champ de calcul dans ArcGIS Desktop à l'aide du curseur ArcPy ?

Champ de calcul dans ArcGIS Desktop à l'aide du curseur ArcPy ?


J'essaie de calculer un champ en fonction des valeurs des autres dans la même couche dans un calcul. Je ne peux pas comprendre pourquoi cela ne fonctionne pas. J'ai même tout coupé pour ne me baser que sur un seul champ et même cela ne fonctionnera pas, tellement frustrant !

Ceci est basé sur un champ

rows = arcpy.UpdateCursor(inputFC) pour la ligne dans les lignes : val = row.getValue(Infield1) row.setValue(outfld , val) rows.updateRow(row) del rows, row arcpy.AddMessage("Completed")

c'est le script final. Il est destiné à calculer les calories en fonction des minutes, de la vitesse et du poids (le poids est un nombre que vous saisissez plutôt qu'un champ) import sys, arcpy, math

inputFC = arcpy.GetParameterAsText(0) # Classe d'entités en entrée timeField = arcpy.GetParameterAsText(1) # Temps d'entrée en minutes speedField = arcpy.GetParameterAsText(2) # Vitesse d'entrée SlopeField = arcpy.GetParameterAsText(3) # Poids de la pente en entrée = float (arcpy.GetParameterAsText(4)) #input poids en kg arcpy.AddField_management(inputFC, 'Calories', 'LONG') #create calorie field rows = arcpy.UpdateCursor(inputFC) pour la ligne dans les lignes : time = row.getValue( timeField) speed = row.getValue(speedField) slope = row.getValue(SlopeField) calories = temps * (vitesse * 3,5 * poids)/200 * pente row.setValue('Calories', calories) rows.updateRow(row) del rangée, rangées

cela dit terminé mais le champ des calories finit par être nul


Testé en utilisant des données factices et fonctionne bien. Il y avait de nombreux problèmes logiques tels que le référencement de variables non initialisées, l'utilisation de noms de champ au lieu de valeurs de champ dans les calculs, des arguments incorrects poursetValue, etc.

import arcpy inputFC = arcpy.GetParameterAsText(0) # Classe d'entités en entrée timeField = arcpy.GetParameterAsText(1) # Nom du champ de temps dans la classe d'entités en entrée speedField = arcpy.GetParameterAsText(2) # Nom du champ de vitesse dans la classe d'entités en entrée weight = float(arcpy.GetParameterAsText(3)) # Valeur de poids d'entrée en kg arcpy.AddField_management(inputFC, 'Calories', 'LONG') #créer le champ de calories rows = arcpy.UpdateCursor(inputFC) pour la ligne dans les lignes : temps = ligne. getValue(timeField) speed = row.getValue(speedField) calories = temps * (vitesse * 3,5 * poids)/200 row.setValue('Calories', calories) rows.updateRow(row) del row, rows

Une solution consiste à utiliser le calculateur de champ avec la logique expliquée dans cette question que j'ai posée. Instructions "if" imbriquées dans ArcGIS Field Calculator

Quelle est l'erreur que vous obtenez actuellement

Je pense Infield1 * (Infield2 * 3.5 * Infield3)/200
devrait être calories=Infield1 * (Infield2 * 3.5 * Infield3)/200

sinon, il semble que vous exécutiez un calcul mais que vous ne le stockiez pas dans une variable.


Voir la vidéo: Tutoriel Fragstat calcul indices et préparation des cartes sur ArcMap