#1 Thu 23 July 2015 23:23
- NicolasSilov
- Juste Inscrit !
- Date d'inscription: 11 Nov 2014
- Messages: 9
Carte a la chaine python
Bonjour tout le monde.
J'ai une centaine de cartes a réaliser, sur lesquelles la seule chose que je dois changer est la variable d'entrée puis la mise en page apres: J'ai déja réussi a automatiser tout ca sur model builder, et j'ai obtenu un modele intéressant dans lequel je n'ai qu'a changer le numéro de la variable et le nom de sortie.
Toutefois je voulais savoir si quelqu'un connait une maniere de simplifier encore plus cela a l'aide de python. C'est a dire créer un script qui répete l'opération sans cesse en changeant automatiquement la variable d'entree et le nom de sortie.
Mes variables se nomment de V1 a V125 et voici mon script:
Code:
# Import arcpy moduleimport arcpy # Check out any necessary licenses arcpy.CheckOutExtension("spatial") # Load required toolboxes arcpy.ImportToolbox("Z:/2_CONTRATOS/00111_CAMBIO CLIMATICO, VIVIENDA Y OT/03_GRAPH/MXD/HOTSPOT_GDB/HS_GDB.gdb/Toolbox") # Script arguments Variable = arcpy.GetParameterAsText(0) if Variable == '#' or not Variable: Variable = "V12" # provide a default value if unspecified Municipios_base_hs_shp = arcpy.GetParameterAsText(1) if Municipios_base_hs_shp == '#' or not Municipios_base_hs_shp: Municipios_base_hs_shp = "Z:\\2_CONTRATOS\\00111_CAMBIO CLIMATICO, VIVIENDA Y OT\\03_GRAPH\\MXD\\SHP\\Municipios_base_hs.shp" # provide a default value if unspecified LIM_COLOMBIA_shp = arcpy.GetParameterAsText(2) if LIM_COLOMBIA_shp == '#' or not LIM_COLOMBIA_shp: LIM_COLOMBIA_shp = "Z:\\2_CONTRATOS\\00111_CAMBIO CLIMATICO, VIVIENDA Y OT\\03_GRAPH\\MXD\\SHP\\LIM_COLOMBIA.shp" # provide a default value if unspecified Kriging_shp44 = arcpy.GetParameterAsText(3) if Kriging_shp44 == '#' or not Kriging_shp44: Kriging_shp44 = "C:\\Users\\practicante1\\Documents\\ArcGIS\\Default.gdb\\Kriging_shp44" # provide a default value if unspecified # Local variables: yo = Municipios_base_hs_shp ok = yo Kriging_shp43 = ok Output_variance_of_prediction_raster = ok Results_Field = Municipios_base_hs_shp Probability_Field = Municipios_base_hs_shp Source_ID = Municipios_base_hs_shp Interpolacion_K = "Z:\\2_CONTRATOS\\00111_CAMBIO CLIMATICO, VIVIENDA Y OT\\03_GRAPH\\MXD\\HOTSPOT_GDB\\Interpolacion_K" # Process: Hot Spot Analysis (Getis-Ord Gi*) arcpy.HotSpots_stats(Municipios_base_hs_shp, Variable, yo, "FIXED_DISTANCE_BAND", "EUCLIDEAN_DISTANCE", "NONE", "", "", "", "NO_FDR") # Process: Feature To Point arcpy.gp.toolbox = "Z:/2_CONTRATOS/00111_CAMBIO CLIMATICO, VIVIENDA Y OT/03_GRAPH/MXD/HOTSPOT_GDB/HS_GDB.gdb/Toolbox"; # Warning: the toolbox Z:/2_CONTRATOS/00111_CAMBIO CLIMATICO, VIVIENDA Y OT/03_GRAPH/MXD/HOTSPOT_GDB/HS_GDB.gdb/Toolbox DOES NOT have an alias. # Please assign this toolbox an alias to avoid tool name collisions # And replace arcpy.gp.FeatureToPoint(...) with arcpy.FeatureToPoint_ALIAS(...) arcpy.gp.FeatureToPoint(yo, ok, "CENTROID") # Process: Kriging arcpy.gp.Kriging_sa(ok, "GiZScore", Kriging_shp43, "Spherical 6488,111982", "6566,1026784", "VARIABLE 12", Output_variance_of_prediction_raster) # Process: Extract by Mask arcpy.gp.toolbox = "Z:/2_CONTRATOS/00111_CAMBIO CLIMATICO, VIVIENDA Y OT/03_GRAPH/MXD/HOTSPOT_GDB/HS_GDB.gdb/Toolbox"; # Warning: the toolbox Z:/2_CONTRATOS/00111_CAMBIO CLIMATICO, VIVIENDA Y OT/03_GRAPH/MXD/HOTSPOT_GDB/HS_GDB.gdb/Toolbox DOES NOT have an alias. # Please assign this toolbox an alias to avoid tool name collisions # And replace arcpy.gp.ExtractByMask(...) with arcpy.ExtractByMask_ALIAS(...) arcpy.gp.ExtractByMask(Kriging_shp43, LIM_COLOMBIA_shp, Kriging_shp44)
il y'a en effet plusieurs opérations intermédiaires a chaque fois, mais qui ne nécéssitent aucun changement important (ce qui expliquent leurs noms fantaisistes). Donc si quelqu'un connait un petit scrypte pour ce faire, je vous remercie
Hors ligne
#2 Wed 05 August 2015 17:31
- JulienRscl
- Participant occasionnel
- Lieu: Lyon
- Date d'inscription: 23 May 2013
- Messages: 26
Re: Carte a la chaine python
Si votre question est de juste changer la variable de V1 à V125 alors une boucle devrait répondre à votre demande.
Code:
i=0 while i <= 125 : variable = "V"+str(i) .....
Hors ligne
#3 Wed 05 August 2015 18:47
- NicolasSilov
- Juste Inscrit !
- Date d'inscription: 11 Nov 2014
- Messages: 9
Re: Carte a la chaine python
Merci pour ta réponse Julien
J'aurai quelques dernieres questions:
- A quel endroit du script faut il entrer cette boucle, au début ou a la fin?
- LE script me sortant a cahque fois des nouveaux shape, mais en gardant le meme nom de sortie, le script bug. Peut on également avec une boucle faire en sorte que les variables en sorties change a chaque fois? C'est a dire, disons que le nom de sortie soit kriging, obtenir au fur et a mesure en sortie les shp kriging 1, kringing 2, kriging 3 etc?
Je te remercie
Hors ligne
#4 Thu 06 August 2015 10:05
- JulienRscl
- Participant occasionnel
- Lieu: Lyon
- Date d'inscription: 23 May 2013
- Messages: 26
Re: Carte a la chaine python
Ton script doit être imbriqué entièrement dans la boucle.
Petite rectification, il faut bien penser à incrémenter ton i en fin de boucle (i=i+1) afin d'éviter la boucle infinie.
Ensuite pour le nom des shapes, il suffit aussi de rajouter l'indice i dans ton nom de la même manière que pour la variable en rajoutant un str(i).
Tu peux me contacter sur mon mail perso si besoin.
Hors ligne