Suite

Problèmes avec les boucles imbriquées - Comment repartir de 0 ?

Problèmes avec les boucles imbriquées - Comment repartir de 0 ?


J'ai :

  • Classes d'entités 12 lignes (lineFC)
  • Une classe d'entités surfaciques (grille)
  • Une autre classe d'entités surfaciques avec des polygones beaucoup plus gros (gridDivision)

Le processus:

  • Sélectionnez une ligne FC dans une liste
  • Sélectionnez une grilleDivision
  • Sélectionnez tous les polygones de la grille à l'intérieur de gridDivision
  • Sélectionnez les lignes à l'intérieur de gridDivision
  • Faire une jointure spatiale entre les lignes et la grille

Ceci est fait pour tous les gridDivision. Il y a une boucle avec un SearchCursor qui recherche l'oid. Le résultat est 5 jointures spatiales FC

Une fois cela fait, les 5 jointures spatiales sont fusionnées et converties en raster.

Le problème:

Cela fonctionne correctement pour la première classe d'entités linéaires de la liste. La deuxième fois que la boucle s'exécute, l'oid ne commence pas à partir de 0 mais reste à la dernière valeur. Je n'ai donc pas 5 jointures spatiales mais une seule.

POURQUOI?

J'ai essayé cursor.reset() mais cela n'a pas fonctionné.

J'ai essayé avec différentes indentations des boucles mais cela n'a pas fonctionné non plus.

# Importer import arcpy import time import re # Définir la minuterie à partir de datetime import datetime startTime = datetime.now() # Définir l'environnement arcpy.env.workspace = r"E:DensityMapsDensityMapsTest.gdb" arcpy.env.overwriteOutput = True # Définir des variables locales et créer des couches gridDivision = arcpy.MakeFeatureLayer_management("GridDivisionTEST", "GridDivisionTEST_lyr") grid = arcpy.MakeFeatureLayer_management(r"E:DensityMapsDensityMaps1Km_1.gdbGrid1km_Clip_EraseOutsideGrid1Krastic", Faire la liste de toutes les lignes linesList = arcpy.ListFeatureClasses("*Lines_Project") #print linesList # Parcourez toutes les classes d'entités de lignes pour lineFC dans linesList : print "C'EST LE FICHIER DE LIGNE : "+lineFC avec arcpy.da.SearchCursor(gridDivision , ["[email protected]"]) comme curseur : pour oid dans le curseur : print (oid[0]) #print "C'EST L'OID " +str(oid[0]) # Préparez-vous à faire la requête pour sélectionner un grand carré de GridDivision à la fois descObj = arcpy.Describe(gridDivision) field = desc Obj.OIDFieldName df = arcpy.AddFieldDelimiters(gridDivision,field) query = df + " = " + str(oid[0]) #print query #Sélectionnez les carrés de gridDivision commençant par 1 arcpy.SelectLayerByAttribute_management(gridDivision, "NEW_SELECTION", requête ) print "GridDivision number "+str(oid[0])+" sélectionné: "+str(datetime.now() - startTime) # Sélectionnez la grille à l'intérieur de gridDivision arcpy.SelectLayerByLocation_management(grid, "WITHIN", gridDivision) print "Grid selected: "+str(datetime.now() - startTime) # Créer un calque de la sélection. (C'est pour conserver la sélection) arcpy.MakeFeatureLayer_management(grid, "grid_lyr") # Sélectionnez les lignes dans gridDivision et ajoutez-les à la sélection précédente print "Selecting "+lineFC+" inside GridDivision "+str(oid)+"… " arcpy .SelectLayerByLocation_management("grid_lyr", matchOption, lineFC, "", "ADD_TO_SELECTION") print lineFC+ " selected: "+str(datetime.now() - startTime) # Make Spatial Join print "Making SpatialJoin between "+lineFC+"and grid dans GridDivision "+str(oid)+"… " arcpy.SpatialJoin_analysis(grid, lineFC, lineFC+"_SpatialJoin_"+str(oid[0]), "JOIN_ONE_TO_MANY", "", "", matchOption) print "Spatial Join of division de la grille "+ str(oid) +" et "+lineFC+" done: "+str(datetime.now() - startTime)+"
" # Sélectionnez des morceaux de Spatial Join fileList = arcpy.ListFeatureClasses(lineFC+"_SpatialJoin* ") # Recherche le nom du mois dans les lignes string month = re.search('scope_ais_(.+?)_Lines_Project', lineFC).group(1) #print month # Fusionnez-les print "Fusionner les jointures spatiales de "+ mois+"… " ar cpy.Merge_management(fileList, month+"_Merged") print month+" fusionné : "+str(datetime.now() - startTime)+"
" #Supprimer les classes d'entités de jointure spatiale pour économiser de l'espace sur le disque pour deleteSpatialJoinFC dans fileList : arcpy .Delete_management(deleteSpatialJoinFC) print "Suppression des jointures spatiales pour économiser de l'espace sur le disque" # Dissoudre print "Dissolving "+month+"… " arcpy.Dissolve_management(month+"_Merged", month+"_Dissolve", "TARGET_FID", [["Join_Count ", "SUM"]]) print "Dissous : "+str(datetime.now() - startTime)+"
" #Supprimer les classes d'entités fusionnées pour économiser de l'espace sur le disque arcpy.Delete_management(month+"_Merged") print " Classe d'entités fusionnée supprimée pour économiser de l'espace sur le disque"+"
" # Faire le raster print "Making "+month+" raster… " arcpy.FeatureToRaster_conversion(month+"_Dissolve","SUM_Join_Count", month+"_2014_Raster") print "RASTER " +mois+" READY!!: "+str(datetime.now() - startTime)+"
" #Print end time print "Finished "+str(datetime.now() - startTime)

Ces messages imprimés peuvent également aider à comprendre le problème. Vous pouvez le voir après le message :

RASTER avril PRÊT !!: 0:00:24.593000

le nouveau fichier scope_ais_august_Lines_Project démarre mais l'OID est 7 et non 0

CECI EST LE FICHIER DE LIGNE : scope_ais_april_Lines_Project 1 GridDivision numéro 1 sélectionné : 0:00:01.656000 Grille sélectionnée : 0:00:01.687000 Sélection de scope_ais_april_Lines_Project dans GridDivision (1,)… scope_ais_april_Lines_Project sélectionné : 0:00:01.843000 Making Spatial Linevision_Projectr_Grid (1,)… Spatial Join of grid division (1,)and scope_ais_april_Lines_Project done : 0:00:05.265000 2 GridDivision numéro 2 sélectionné : 0:00:05.297000 Grid selected : 0:00:05.312000 Sélection scope_ais_april_Lines_Project dans GridDivision (2,) … scope_ais_april_Lines_Project sélectionné : 0:00:05.469000 Faire SpatialJoin entre scope_ais_april_Lines_Project et grid dans GridDivision (2,)… Spatial Join of grid division (2,)et scope_ais_april_Lines_Project done : 0:00:08.891000 5 GridDivision numéro 5 sélectionné : 0:00:08.08.08. Grille sélectionnée : 0:00:08.937000 Sélection de scope_ais_april_Lines_Project dans GridDivision (5,)… scope_ais_april_Lines_Project sélectionné : 0 : 00:09.094000 Faire SpatialJoin entre scope_ais_april_Lines_Project et grid dans GridDivision (5,)… Spatial Join of grid division (5,)and scope_ais_april_Lines_Project done: 0:00:12.511000 6 GridDivision numéro 6 sélectionné: 0:00:12.527000 Grille sélectionnée: 0:00 :12.558000 Sélection de scope_ais_april_Lines_Project dans GridDivision (6,)… scope_ais_april_Lines_Project sélectionné : 0:00:12.714000 Faire SpatialJoin entre scope_ais_april_Lines_Project et grille dans GridDivision (6,)… Spatial Join of grid division (6,)et scope_ais_april_april_16 GridDivision numéro 7 sélectionné : 0:00:16.168000 Grille sélectionnée : 0:00:16.183000 Sélection de scope_ais_april_Lines_Project dans GridDivision (7,)… scope_ais_april_Lines_Project sélectionné : 0:00:16.355000 Faire SpatialJoin entre scope_ais_april_Lines_Project et grille dans GridDivision (7,) grid division (7,)and scope_ais_april_Lines_Project done: 0:00:19.777000 Fusion des jointures spatiales d'avril… april merge d: 0:00:21.365000 Suppression de jointures spatiales pour économiser de l'espace sur le disque Dissolution d'avril… Dissolution : 0:00:23.249000 Suppression de la classe d'entités fusionnée pour économiser de l'espace sur le disque Création d'un raster d'avril… RASTER d'avril PRÊT !!: 0:00:24.593000 CECI EST L'OID 7 CECI EST LE FICHIER DE LIGNE : scope_ais_august_Lines_Project 7 GridDivision numéro 7 sélectionné : 0:00:24.624000 Grille sélectionnée : 0:00:24.640000 Sélection de scope_ais_august_Lines_Project dans GridDivision (7,)… scope_ais_august_Lines_Project sélectionné : 0:00:24.796000 Making SpatialJoin between scope_ais_august_Lines_Lines_Projectand grid inside GridDivision (7,)… Spatial Join of grid division (7,)and scope_ais_august_Lines_Project done: 0:00:28.259000 Fusion des jointures spatiales d'août… août merged: 0:00:28.884000 Suppression de jointures spatiales pour économiser de l'espace sur le disque Dissolution d'août… Dissous : 0:00:29.633000 Classe d'entités fusionnée supprimée pour économiser de l'espace sur le disque Création d'un raster août… RASTER août PRÊT !! : 0:00:30.930000 C'EST L'OID 7 Terminé 0:00:30.930000

C'est parce que vous créez une sélection sur votregrilleDivisioncouche. Le curseur parcourt alors uniquement les entités sélectionnées.

Effacez votre sélection après votre curseur.

# Parcourez toutes les classes d'entités de lignes pour lineFC dans linesList : print "CECI EST LE FICHIER DE LIGNE : "+lineFC avec arcpy.da.SearchCursor(gridDivision, ["[email protected]"]) comme curseur : pour oid dans le curseur : print (oid [0]) #print "CECI EST L'OID " +str(oid[0])… autre code… # Effacer la sélection <--------- NOUVEAU CODE arcpy.SelectLayerByAttribute_management(gridDivision, "CLEAR_SELECTION")

Voir la vidéo: Näin neulot kantapään sukkaan