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é ?

#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! sad


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

 

Pied de page des forums

Powered by FluxBB