Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB