Suite

Accès aux entités sélectionnées dans la sortie de la sous-couche à partir du traçage du réseau géométrique

Accès aux entités sélectionnées dans la sortie de la sous-couche à partir du traçage du réseau géométrique


J'ai mis en place un réseau géométrique avec des lignes de cours d'eau et des utilisateurs d'eau. J'essaie d'utiliser ArcPy pour automatiser le traçage en aval de chaque nœud/jonction de mon réseau géométrique afin d'obtenir des ID utilisateur pour tous les nœuds en aval. Je ne peux pas comprendre comment accéder aux nœuds sélectionnés dans le groupe de couches qui est sorti du traçage.Arcpy.searchcursor("nom de la sous-couche")ne semble pas pouvoir trouver ma sous-couche. Comment puis-je accéder uniquement aux nœuds sélectionnés à partir de mon traçage ?

Lorsque j'utilise ListLayers comme suit, il n'inclut pas le groupe de calques de sortie de trace avec des sélections même si je peux le voir dans la table des matières :

arcpy.TraceGeometricNetwork_management(myNetwork,outNet,mypts,"TRACE_UPSTREAM") calques = arcpy.mapping.ListLayers(mxd) pour le calque dans les calques : if layer.isGroupLayer : if layer.name == arcpy.mapping.Layer(outNet) : pour subLayer in layer : if subLayer.name == userLayer : #Obtenir une liste des identifiants d'utilisateurs en aval avalUsers = [] rows = arcpy.SearchCursor(userLayer) pour la ligne dans les lignes : avalUsers.append(row.HYDROID) del rows, row print « ID utilisateur en aval », en avalUsers

J'ai donc également essayé de faire spécifiquement référence à la couche de sortie de trace, puis le SearchCursor dit qu'il ne peut pas trouver ma sous-couche avec les nœuds utilisateur :

arcpy.TraceGeometricNetwork_management(myNetwork,outNet,mypts,"TRACE_UPSTREAM") layer = arcpy.mapping.Layer(outNet) pour la sous-couche dans la couche : if subLayer.name == userLayer : #Obtenir une liste des ID d'utilisateur en aval avalUsers = [] lignes = arcpy.SearchCursor(userLayer) pour la ligne dans les lignes : en avalUsers.append(row.HYDROID) del rows, row print « ID utilisateur en aval », en avalUsers

Une astuce utile consiste à accéder à la sortie de la couche de groupe à partir de son emplacement in_memory :

arcpy.env.workspace = r'in_memory' #Group Layer réside dans in_memory #oubliez la référence de la carte et accédez directement à sa source userLayer = #assurez-vous que cela est défini en avalUsers = [] arcpy.TraceGeometricNetwork_management(myNetwork,outNet,mypts, "TRACE_UPSTREAM") pour la couche dans arcpy.mapping.Layer(outNet): #referencing Group Layer in_memory for x in arcpy.mapping.ListLayers(layer): #ListLayers fonctionne aussi in_memory, pour répertorier les couches à l'intérieur de la couche de groupe si x.name == userLayer: rows = arcpy.da.SearchCursor(userLayer, 'HYDROID') #Mieux vaut utiliser le curseur de recherche plus récent avec un champ spécifié pour la ligne dans les lignes : avalUsers.append(row[0]) #cursors make tuples, et vous voulez des éléments à la 0e position du tuple imprimer "ID utilisateur en aval", en avalUsers

Cela ressemble beaucoup à une question que j'ai postée à la même époque. J'ai collé mon code de travail complet, si vous voulez le vérifier : /a/176926/56700


Voir la vidéo: Κράτησε επαφή με τις αγαπημένες σου συνταγές με το VarioGuide της Electrolux