Suite

Ajouter de la valeur au champ en utilisant arcpy


J'ai calculé l'angle d'azimut entre deux points. J'essaie de créer un nouveau champ où je stockerai mes valeurs d'angle, mais bien que le champ soit créé, il reste vide, aucune valeur à l'intérieur !

J'utilise ArcGIS 10.1, la fenêtre Python. C'est le code :

import arcpy import math arcpy.AddField_management("Parcelles_class_FeatureToPoi3","new_field","DOUBLE") cur = arcpy.UpdateCursor("Parcelles_class_FeatureToPoi3") pour la ligne dans cur : row.getValue("POINT_X") row.getValue("POINT_Y" ) row.getValue("end_x") row.getValue("end_y") row.setValue("new_field", math.atan2((end_y-POINT_Y), (end_x-POINT_X))) cur.updateRow(row)

Les boucles Python doivent être indentées (précédées de 2 ou 4 espaces) pour indiquer au logiciel où la boucle commence/se termine.

import arcpy import math arcpy.AddField_management("Parcelles_class_FeatureToPoi3","new_field","DOUBLE") cur = arcpy.UpdateCursor("Parcelles_class_FeatureToPoi3") pour la ligne dans cur : row.getValue("POINT_X") row.getValue("POINT_Y" ) row.getValue("end_x") row.getValue("end_y") row.setValue("new_field", math.atan2((end_y-POINT_Y), (end_x-POINT_X))) cur.updateRow(row)

J'ai généralement ouvert mes scripts dans un autre logiciel (par exemple, Notepad ++), puis je les copie dans la fenêtre Python afin que tous les retraits soient correctement alignés.

De plus, vous ne définissez pas de valeurs pour la variablefin_y,POINT_Yetc.

pour la ligne dans cur : PointX = row.getValue("POINT_X") print PointX PointY = row.getValue("POINT_Y") print PointY EndX = row.getValue("end_x") print EndX EndY = row.getValue("end_y" ) print EndY azimut = math.atan2((EndY - PointY), (EndX - PointX)) print azimut row.setValue("new_field", azimut) cur.updateRow(row)

J'y ai également inclus une déclaration d'impression afin que vous puissiez vérifier que les données sont correctement accessibles ; n'hésitez pas à le supprimer une fois que vous savez que tout fonctionne, puis vous pouvez resserrer davantage le code (par exemple, ramener les équations dans leligne.setValueligne au lieu de déclarer une variable séparée). Cela peut être finalement condensé en :

row.setValue("new_field", math.atan2((row.getValue("end_y") - row.getValue("POINT_Y")), (row.getValue("end_x") - row.getValue("POINT_X") )))

si vous voulez vraiment économiser de l'espace :)


Voir la vidéo: ArcGis Ajouter u0026 Supprimer un champ (Octobre 2021).