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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 03 August 2007 21:13

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Problème de liste (dans un script python)

Bonjour à tous,

Voici une partie de mon script:

#Import COM Dispatch module
import win32com.client

#Create the geoprocessor objet
gp = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")
#gp.SetProduct("Arcview")

#Set the workspace.
gp.Workspace = "K:/ProjetGPS/contrat/Resultat/Feuillets"
if not gp.exists (gp.Workspace):
    gp.AddError ("Workspace absent")
else:
    try:
        #   Liste des shapefiles représentant les feuilletss
        fcs = gp.ListFeatureClasses("*","all")
        fcs.reset()
        fc = fcs.next()
        gp.AddMessage("Tout va bien jusqu'ici")
        while fc != "":
            gdbpath = "K:/ProjetGPS/contrat/Resultat"
            outfc = gdbpath + "/" + fc + ".shp"
            try:
                gp.MakeFeatureLayer(fc, "fc_layer")
                gp.MakeFeatureLayer("K:\ProjetGPS\contrat\Points_Geodesiques/ptsgeod.shp","ptsgeod_lyr")
                gp.SelectLayerByLocation("ptsgeod_lyr", "intersect", "fc_layer")
                gp.CopyFeatures("ptsgeod_lyr", outfc)
            except:
                gp.addmessage("Ca ne fonctionne pas")
            fc = fcs.next()
    except:
        gp.AddError ("Rien ne marche")
gp.RefreshCatalog(gdbpath)



Le scripts fonctionne seulement pour le premier feature class de ma liste et non pour les autres. Auriez-vous une solution?

Merci!

Hors ligne

 

#2 Sat 04 August 2007 15:20

jaykayone
Participant actif
Date d'inscription: 15 Feb 2007
Messages: 95

Re: Problème de liste (dans un script python)

bonjour,

il faut incrémenter le nom du featurelayer ....

Jeff

Hors ligne

 

#3 Mon 06 August 2007 14:29

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Re: Problème de liste (dans un script python)

Je suis vraiment un débutant dans la programmation. Est-ce que je pourrais avoir un exemple dans mon script d'incrémentation. J'ai fait des recherches sur le sujet mais j'ai rien trouvé qui ferait fonctionner mon script? Je croyais que fc = fcs.next() était une forme d'incrémentation.

Merci!

Hors ligne

 

#4 Mon 06 August 2007 15:49

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: Problème de liste (dans un script python)

bonjour,
tu es en quelle version d'arcgis et de quelle licence tu disposes ?


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#5 Mon 06 August 2007 17:41

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Re: Problème de liste (dans un script python)

Allo!

Ma version est la 9.1.

Je suis connecté sur la licence ArcInfo.

Hors ligne

 

#6 Mon 06 August 2007 17:56

jaykayone
Participant actif
Date d'inscription: 15 Feb 2007
Messages: 95

Re: Problème de liste (dans un script python)

bonjour,

il faut faire quelque chose de ce genre:

#Import COM Dispatch module
import win32com.client

#Create the geoprocessor objet
gp = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")
#gp.SetProduct("Arcview")

#Set the workspace.
gp.Workspace = "K:/ProjetGPS/contrat/Resultat
/Feuillets"
if not gp.exists (gp.Workspace):
    gp.AddError ("Workspace absent")
else:
    try:
        #   Liste des shapefiles représentant les feuilletss
        fcs = gp.ListFeatureClasses("*","all")
        fcs.reset()
        fc = fcs.next()
        gp.AddMessage("Tout va bien jusqu'ici")
        i= 0
        while fc != "":
            i=i+1
            gdbpath = "K:/ProjetGPS/contrat/Resultat"
            outfc = gdbpath + "/" + fc + ".shp"
            try:
                gp.MakeFeatureLayer(fc, "fc_layer")
                gp.MakeFeatureLayer
("K:ProjetGPScontratPoints_Geodesiques/ptsgeod.shp","ptsgeod_lyr"+str(i))
                gp.SelectLayerByLocation("ptsgeod_lyr"+str(i), "intersect",
"fc_layer")
                gp.CopyFeatures("ptsgeod_lyr", outfc)
            except:
                gp.addmessage("Ca ne fonctionne pas")
            fc = fcs.next()
    except:
        gp.AddError ("Rien ne marche")
gp.RefreshCatalog(gdbpath)

Jeff

--
Jeff Konnen
INSER SA
Switzerland
+41 (0) 21 643 77 11

Hors ligne

 

#7 Mon 06 August 2007 17:59

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: Problème de liste (dans un script python)

essaies ça

#Import COM Dispatch module
import win32com.client

#Create the geoprocessor objet
gp = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")

#Set the workspace.
gp.Workspace = r"K:\ProjetGPS\contrat\Resultat\Feuillets"

if not gp.exists (gp.Workspace):
    gp.AddError ("Workspace absent")
else:
    try:
        #Liste des shapefiles representant les feuillets
        fcs = gp.ListFeatureClasses("*","all")
        fcs.reset()
        fc = fcs.next()

        gp.AddMessage("Tout va bien jusqu'ici")

        gdbpath = r"K:\ProjetGPS\contrat\Resultat"
       
        while fc :
            outfc = gdbpath + "\\" + fc + ".shp"
            try:
                gp.MakeFeatureLayer(fc, "fc_layer")
                gp.MakeFeatureLayer(r"K:\ProjetGPS\contrat\Points_Geodesiques\ptsgeod.shp","ptsgeod_lyr")
                gp.SelectLayerByLocation("ptsgeod_lyr", "intersect", "fc_layer")
                gp.CopyFeatures("ptsgeod_lyr", outfc)
            except:
                gp.addmessage("Ca ne fonctionne pas")
            fc = fcs.next()
    except:
        gp.AddError ("Rien ne marche")
gp.RefreshCatalog(gdbpath)


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#8 Mon 06 August 2007 18:03

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: Problème de liste (dans un script python)

quel est l'intérêt d'incrémenter la boucle dans ce cas alors que l'on réinitialise à chaque passage gp.MakeFeatureLayer(r"K:\ProjetGPS\contrat\Points_Geodesiques\ptsgeod.shp","ptsgeod_lyr") ?


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#9 Mon 06 August 2007 18:52

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Re: Problème de liste (dans un script python)

J'ai essayé ce que Tnarbiv m'a inscrit... le scripts run mais fait seulement les commandes pour le premier feature class et non pour le reste de la liste. Le résultat est la même que mon scripts de base que j'ai inscrit dans mon premier message.

Exemple du détail lors que le scrit "run" :  noter que ma liste contient 5 feature class pour cette exemple

Exécution de (Script_2): Script
Heure de début: Mon Aug 06 12:50:22 2007
Exécution du script Script...
Tout va bien jusqu'ici
Ca ne fonctionne pas
Ca ne fonctionne pas
Ca ne fonctionne pas
Ca ne fonctionne pas
Completed script Script...
Exécution de (Script_2) réussie.
Heure de fin: Mon Aug 06 12:50:26 2007 (temps écoulé: 4,00 s)

Hors ligne

 

#10 Mon 06 August 2007 19:00

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Re: Problème de liste (dans un script python)

Pour l'incrémentation de la réponse de jaykayone, ça ne fonctionne pas. Le script ne prend ne prend aucun feature class de ma liste.

Hors ligne

 

#11 Mon 06 August 2007 19:11

Tnarbiv
Participant assidu
Lieu: Véretz
Date d'inscription: 5 Sep 2005
Messages: 392

Re: Problème de liste (dans un script python)

peux tu mettre des messages plus fréquemment, du style

while fc :
            gp.addmessage(fc)
            outfc = gdbpath + "\\" + fc + ".shp"
            gp.addmessage(outfc)

            try:
                gp.MakeFeatureLayer(fc, "fc_layer")
                gp.MakeFeatureLayer(r"K:\ProjetGPS\contrat\Points_Geodesiques\ptsgeod.shp","ptsgeod_lyr")
                gp.SelectLayerByLocation("ptsgeod_lyr", "intersect", "fc_layer")
                gp.CopyFeatures("ptsgeod_lyr", outfc)
            except:
                gp.addmessage("Ca ne fonctionne pas")

Dernière modification par Tnarbiv (Mon 06 August 2007 19:11)


Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.

Hors ligne

 

#12 Mon 06 August 2007 19:30

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Re: Problème de liste (dans un script python)

Le résultat final est le même biensur.. mais voici le détail  intéressant lors du run:
Vous pouvez voir que le tout fonctionne pour le premier de la liste et non pour les autre feuillets de la liste.

Exécution de (Script_5): Script
Heure de début: Mon Aug 06 13:28:47 2007
Exécution du script Script...
Tout va bien jusqu'ici
K:/ProjetGPS/contrat/Resultat/F31ha202.shp
K:/ProjetGPS/contrat/Resultat/F31hh101.shp
Ca ne fonctionne pas
K:/ProjetGPS/contrat/Resultat/F31hh102.shp
Ca ne fonctionne pas
K:/ProjetGPS/contrat/Resultat/F31hh201.shp
Ca ne fonctionne pas
K:/ProjetGPS/contrat/Resultat/F31hh202.shp
Ca ne fonctionne pas
Completed script Script...
Exécution de (Script_5) réussie.
Heure de fin: Mon Aug 06 13:28:51 2007 (temps écoulé: 4,00 s)

Hors ligne

 

#13 Tue 07 August 2007 09:42

jaykayone
Participant actif
Date d'inscription: 15 Feb 2007
Messages: 95

Re: Problème de liste (dans un script python)

Oups,

j'avais loupé un bout:

#Import COM Dispatch module
import win32com.client

#Create the geoprocessor objet
gp = win32com.client.Dispatch("esriGeoprocessing.GPDispatch.1")
#gp.SetProduct("Arcview")

#Set the workspace.
gp.Workspace = "K:/ProjetGPS/contrat/Resultat
/Feuillets"
if not gp.exists (gp.Workspace):
   gp.AddError ("Workspace absent")
else:
   try:
       #   Liste des shapefiles représentant les feuilletss
       fcs = gp.ListFeatureClasses("*","all")
       fcs.reset()
       fc = fcs.next()
       gp.AddMessage("Tout va bien jusqu'ici")
       i= 0
       while fc != "":
           i=i+1
           gdbpath = "K:/ProjetGPS/contrat/Resultat"
           outfc = gdbpath + "/" + fc + ".shp"
           try:
               gp.MakeFeatureLayer(fc, "fc_layer"+str(i))
               gp.MakeFeatureLayer
("K:ProjetGPScontratPoints_Geodesiques/ptsgeod.shp","ptsgeod_lyr"+str(i))
               gp.SelectLayerByLocation("ptsgeod_lyr"+str(i),
"intersect","fc_layer"+str(i))
               gp.CopyFeatures("ptsgeod_ly"r+str(i), outfc)
           except:
               gp.addmessage("Ca ne fonctionne pas")
           fc = fcs.next()
   except:
       gp.AddError ("Rien ne marche")
gp.RefreshCatalog(gdbpath)

--
Jeff Konnen
INSER SA
Switzerland
+41 (0) 21 643 77 11

Hors ligne

 

#14 Tue 07 August 2007 14:56

CharlesR
Participant occasionnel
Date d'inscription: 3 Aug 2007
Messages: 19

Re: Problème de liste (dans un script python)

Tu es le king du language Python Jaykayone !!  : )

Les dernière modifications que tu as apporté à mon script le font fonctionner parfaitement!

Par contre est-ce que tu pourrais m'expliquer l'ajout des "str(i)" dans les outils de geoprocessor.

Un énorme merci!

Charles

Hors ligne

 

#15 Tue 07 August 2007 16:24

jaykayone
Participant actif
Date d'inscription: 15 Feb 2007
Messages: 95

Re: Problème de liste (dans un script python)

On fait, les noms de layer doivent être uniques dans l'objet GP.
Donc, on donne à chaque fois un nouveau nom aux layers créés.
le str(i) convertit le nombre i en string et tes layers s'appellent alors fc_layer1, fc_layer2, fc_layer3 et ainsi de suite ...

Bonne continuation avec le geoprocessing et python...

Jeff

Hors ligne

 

Pied de page des forums

Powered by FluxBB