(Je suppose que vous êtes baser votre code sur this ArcPy Café recipe.)
Lorsque vous appelez cursor.updateRow
, vous devez lui renvoyer un paramètre: une liste de valeurs de la même longueur que la liste de row
avec laquelle il fonctionnerait. Ainsi, par exemple ...
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
print row # prints a list of 3 values -- ['a', 'b', 'c']
row[0] = 'd' # changes element 0 of list
print row # ['d', 'b', 'c']
cursor.updateRow(row) # passes ['d', 'b', 'c']
Je ne changé la valeur de FIELD
, mais a également renvoyer des valeurs pour FOO
et BAR
. Je pourrais aussi raccourcir:
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
cursor.updateRow(['d', 'b', 'c']) # will work
Mais en passant moins de valeurs dans la liste ne fonctionnera pas:
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
cursor.updateRow(['d']) # will fail
(Il cassera même, si je passe trop de valeurs - le nombre de éléments de la liste doit correspondre au nombre de champs appelés par le UpdateCursor
.)
donc, pour votre situation, vous devez transmettre des valeurs f ou [email protected]
, XShift
et YShift
. À l'heure actuelle, il ne reçoit que [email protected]
(ce qui correspond à la recette originale de l'extrait).
Essayez:
with arcpy.da.UpdateCursor(in_features, ['[email protected]']) as cursor:
for row in cursor:
cursor.updateRow([[row[0][0] + (row[1] or 0),
row[0][1] + (row[2] or 0)]], row[1], row[2])
vous manque une seule citation autour 'YShift' – pbreach
@pbreach J'ai ajouté la citation unique, mais maintenant je reçois l'erreur suivante. 'Erreur d'exécution retraçage (appel le plus récent en dernier): Fichier "", ligne 1, dans Fichier "", ligne 6, en shift_features TypeError: la taille de la séquence doit correspondre à la taille de la row' –