Suite

ArcGIS ajoute une table attributaire à PointGeometry à l'aide d'arcpy


J'essaie d'ajouter une valeur d'attribut à un nouveau PointGeometry avant de l'écrire dans le nouveau fichier. Comment faire avecarcpy?

Disons que dans cet exemple, je veux écrire l'ID de l'entité linéaire dans la nouvelle entité ponctuelle :

points = [] pour la ligne dans arcpy.da.SearchCursor('lineFeature', ("ID", "[email protected]")): length = int(row[1].length) pour i dans xrange(0, length, 10 ): point = row[1].positionAlongLine(i) # devrait écrire l'ID ici # quelque chose comme # point.setValue('sourceID', row[0]) points.append(point) arcpy.CopyFeatures_management(points, 'pointsFeature ')

La commandepoint.setValue('sourceID', ligne[0])indiquer. ne fonctionne pas, il renvoie :

Erreur d'exécution
Traceback (appel le plus récent en dernier) :
Fichier "", ligne 8, dans
AttributeError : l'objet 'PointGeometry' n'a pas d'attribut 'setValue'


point n'est pas un objet de ligne, qui aurait une commande setValue, c'est un objet de géométrie, qui n'a aucun type de fonction pour stocker les attributs de ligne.

Il existe de nombreuses façons de résoudre ce problème, mais une possibilité consiste à faire des points une liste de tuples et à stocker les données sous la forme

points.append((ligne[0], point))

Et puis, au lieu d'utiliser des entités de copie pour ajouter tous les points, vous devez utiliser arcpy.da.InsertCursor dans une boucle sur la liste des points et définir l'ID et la géométrie de chaque nouvelle entité que vous insérez. Par exemple, quelque chose comme ça (je suis sur une ancienne version d'Arc, donc je n'ai pas le package arcpy.da à tester)

# Créer une nouvelle entité arcpy.CreateFeatureclass_management('out_path', 'pointsFeature', "POINT") # ajouter un champ à l'entité arcpy.AddField_management('pointsFeature', "ID", "SHORT") # ajouter des points à l'entité curseur = arcpy. da.InsertCusor('pointsFeature', ("ID", "[email protected]")) pour pt en points : cursor.insertRow(pt)

Il semble que vous essayez de placer des points à intervalles réguliers le long de la ligne. Pour ce faire, je suggère d'utiliser:

point=arcpy.Point()

En dehors de votre boucle. À l'intérieur, utilisez :

theP=feat.positionAlongLine (i) point.X=theP.firstPoint.X point.Y=theP.firstPoint.Y pnt=arcpy.PointGeometry(point,SR)

et

points.append((pnt,ID))

N'oubliez pas d'obtenir la référence spatiale (SR ici) à partir de la classe d'entités linéaires. Le reste selon la solution @WMrenn


Voir la vidéo: la table attributaire. ArcGIS. arcgis الدرس 05 احتراف (Octobre 2021).