#1 Wed 26 October 2011 16:28
- sekar
- Participant occasionnel
- Lieu: Alma, Québec
- Date d'inscription: 1 Dec 2006
- Messages: 39
[Arcgis 9.2 lic ArcView] script python compter if else
Bonjour à tous et à toutes
Voilà le problème: j'ai un modelbuilder qui fait toutes sortes de traitements sur des géometries, notamment, un eliminate (celui de ET geowizard). Il arrive parfois que les critères de sélection des polygones à éliminer ne génère rien (ex: "AREA" <= 0.1 , dans certaines couches il n'y a pas de polygones plus petit ou égale à 0.1ha). lorsque cela arrive le modelbuilder plante.
Le problème est que le éliminate est au milieu du modelbuilder et qu'il reste beaucoups de traitements à faire ensuite et que je fais rouler ce modelbuilder en batch et que ça prend du temps à préparer le lancement du modelbuilder en batch.
J'ai donc penser à placer avant le eliminate un Select selon la formule "AREA" <= 0.1 et ensuite un compter qui au lieu de n'avoir qu'un longInteger en sortie aurait un true et un false en précondition à la suite des traitements. C'est à dire s'il y a des entités de sélectionnées la pré-contion est vrai donc fait le Eliminate et les traitments qui suivent. S'il n'y a pas d'entités de sélectionnées, ne fait pas le eliminate mais fait les traitments qui sont après.
Je ne suis même pas débutant en python, en bref pour le python je n'existe pas, voilà plusieurs jours que j'essaie de bidouiller le Getcount (outils de gestion de données=>table=>Compter) sous forme de script python pour faire en sorte qu'il ne me sorte pas un longInteger mais deux booléens (Vrai et faux). Mais... ça marche pas!
Pouvez-vous m'aider?
Merci d'avance.
Ministère des ressources naturelles et de la faune
801 avenue du pont Taché nord
Alma, Québec, Canada
Hors ligne
#2 Wed 26 October 2011 17:12
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: [Arcgis 9.2 lic ArcView] script python compter if else
Salut,
Si tu as un morceau de code à nous soumettre (si ce n'est pas confidentiel bien entendu) celà nous permettrait de répondre avec plus de pertinence.
Notament celui du Eliminate, vu que c'est celui ci qui plante visiblement.
A+
Joël
Hors ligne
#3 Wed 26 October 2011 20:18
- sekar
- Participant occasionnel
- Lieu: Alma, Québec
- Date d'inscription: 1 Dec 2006
- Messages: 39
Re: [Arcgis 9.2 lic ArcView] script python compter if else
Bonjour Spacejo
Pour ce qui est d'un bout de code, je ne peux te montrer que le script python que j'essaie de faire à partir du compter (getcount) pour ce qui est du eliminate de ETgeowizard et des autres traitements je les utilise dans mon modelBuilder tel quel. ce que je veux faire c'est un script pour l'intégrer à mon modelBuilder, je ne souhaite pas faire un script avec mon model builder.
Je joins les deux essais aussi infructueux l'un que l'autre.
premier essais
Code:
import arcgisscripting gp = arcgisscripting.create() table_en_entree = sys.argv[1] count = gp.GetCount_management(table_en_entree) # Local variables... try: if count > "0": arcgisscripting.SetParameterAsText(2,"true") #le premier parametre est vrai s'il y a des enregistrements dans la table arcgisscripting.SetParameterAsText(3,"false") #le second parametre est vrai s'il n'y a pas d'enregistrements dans la table else: arcgisscripting.SetParameterAsText(2,"false") arcgisscripting.SetParameterAsText(3,"true")
deuxième essais
Code:
# Import system modules import arcgisscripting try: # Set the parameters InputFC = arcgisscripting.GetParameterAsText(1) #Evaluate if input has greater than 0 features. if (int(arcgisscripting.GetCount_management(InputFC).getOutput(1)) > 0): #Use the Get Count tool to get the row count. arcgisscripting.SetParameter(2, True) #If the count is greater than 0 set the output Boolean parameter 1 to true. arcgisscripting.SetParameter(3, False) #If the count is greater than 0 set the output Boolean parameter 2 to true. arcgisscripting.SetParameter(4, InputFC) #If the count is greater than 0 set the output feature layer parameter 3 to be same as input feature class selection. arcgisscripting.AddMessage("Feature count greater than 0") #If it does not have greater than 0 features it will have 0 else: arcgisscripting.SetParameter(2, False) #If the count is equal to 0 than set the output Boolean parameter 1 to false. arcgisscripting.SetParameter(3, True) #If the count is equal to 0 than set the output Boolean parameter 2 to true. arcgisscripting.AddMessage("Feature count equal to 0")
Le deuxième essais viens d'un script de ArcGIS 10 que j'ai récupéré ici:
http://blogs.esri.com/Dev/blogs/geoproc … Else4.aspx. J'ai changé tous les "arcpy" pour des "arcgisscripting" car d'après ce que j'ai lu arcpy est pour la version 10 d'arcgis.
le premier je l'ai fait à partir des infos glannées à droite à gauche.
merci de votre attention
Dernière modification par sekar (Wed 26 October 2011 20:21)
Ministère des ressources naturelles et de la faune
801 avenue du pont Taché nord
Alma, Québec, Canada
Hors ligne
#4 Thu 27 October 2011 11:04
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: [Arcgis 9.2 lic ArcView] script python compter if else
Salut,
Peut être ça:
Code:
import arcgisscripting gp = arcgisscripting.create() table_en_entree = gp.GetParameter(0) count = gp.GetCount_management(table_en_entree) if count > "0": gp.SetParameter(1, True) else: gp.SetParameter(1, False) #gp.AddMessage(gp.GetParameterAsText(1))
En définissant bien le second paramètre du script en "output"
Hors ligne
#5 Thu 27 October 2011 15:24
- sekar
- Participant occasionnel
- Lieu: Alma, Québec
- Date d'inscription: 1 Dec 2006
- Messages: 39
Re: [Arcgis 9.2 lic ArcView] script python compter if else
Bonjour à tous
Merci énormément Dominique, j'ai été en mesure de résoudre mon problème. J'ai eu a modifié le code pour qu'il fasse exactement ce que je souhaite mais tu m'as vraiment donné le bon élan pour que ça marche.
Donc voici le code avec quelques modifications.
Code:
import arcgisscripting gp = arcgisscripting.create() table_en_entree = gp.GetParameter(0) count = gp.GetCount_management(table_en_entree) if count > 0: gp.SetParameter(1, True) gp.SetParameter(2, False) else: gp.SetParameter(1, False) gp.SetParameter(2, True)
Dernière modification par sekar (Thu 27 October 2011 15:27)
Ministère des ressources naturelles et de la faune
801 avenue du pont Taché nord
Alma, Québec, Canada
Hors ligne
#6 Thu 27 October 2011 16:52
- sekar
- Participant occasionnel
- Lieu: Alma, Québec
- Date d'inscription: 1 Dec 2006
- Messages: 39
Re: [Arcgis 9.2 lic ArcView] script python compter if else
Rebonjour
voilà comment j'intègre le script dont j'ai laissé le code dans le précédent message.
le script "count" regarde s'il y'a des enregistrement dans la table, s'il y en a la condition est VRAI et il permet l'execution du ou des traitements qui suivent (découpage). Si la table est vide, la condition est fausse et ce sont donc d'autres traitements qui sont executés (Union).
[img]http://img819.imageshack.us/img819/614/ifelse.jpg[/img]
Merci encore à Dominique et si ça peut servir à du monde, amusez-vous!!!
Salut
Ministère des ressources naturelles et de la faune
801 avenue du pont Taché nord
Alma, Québec, Canada
Hors ligne