#1 Wed 12 November 2008 12:22
[Script] Intersect en Python
Bonjour,
J'essaye d'utiliser la fonction intersect dans un script python, mais je n'arrive pas à la faire faire fonctionner.
Voici mon script :
Code:
# Import system modules import sys, string, os, arcgisscripting # Create the Geoprocessor object gp = arcgisscripting.create() # Load required toolboxes... gp.AddToolbox("C:\Program Files\ArcGIS\ArcToolbox\Toolboxes\Analysis Tools.tbx") gp.workspace = "D:\Travail\Julie\ArcGIS\python\script_tdc\intersection" gp.addmessage("pret...") gp.intersect_analysis("tco_tampons ; tc1", "intersection") gp.addmessage("intersection ok")
Le message "pret..." s'affiche puis j'obtiens un message d 'erreur ("echec de l'exécution").
Lorsque j'utilise l'outil Intersecter dans ArcToolbox avec les mêmes couches, tout fonctionne bien.
J'utilise ArcGis 9.2, licence ArcInfo.
Quelqu'un saurait-il d'où vient le problème?
Merci!
Julie.
Hors ligne
#2 Wed 12 November 2008 13:07
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: [Script] Intersect en Python
Bonjour,
Une question toute bete : tes 2 couches tco_tampons et tc1 sont bien situees dans ton espace de travail "D:\Travail\Julie\ArcGIS\python\script_tdc\intersection" ?
Essaye de remplacer tes \ par des / ou des \\ dans tes chemins d'acces, ca pause parfois des problemes.
Tu peux aussi ajouter ca ci dessous, tu auras peut-etre un message plus parlant.
Code:
# Import system modules import sys, string, os, arcgisscripting try: # Create the Geoprocessor object gp = arcgisscripting.create() # Load required toolboxes... gp.AddToolbox("C:\\Program Files\\ArcGIS\\ArcToolbox\\Toolboxes\\Analysis Tools.tbx") gp.Workspace = "D:\\Travail\\Julie\\ArcGIS\\python\\script_tdc\\intersection" gp.addmessage("pret...") gp.Intersect_analysis("tco_tampons ; tc1", "intersection") gp.addmessage("intersection ok") except: # If an error occurred while running a tool print the messages print gp.GetMessages()
Dans ce cas quel est ton message d'erreur
A+
Rodolphe
Hors ligne
#3 Wed 12 November 2008 13:12
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [Script] Intersect en Python
Bonjour,
voici mes remarques sur ton script :
Code:
# Load required toolboxes... gp.AddToolbox("C:\Program Files\ArcGIS\ArcToolbox\Toolboxes\Analysis Tools.tbx") gp.workspace = "D:\Travail\Julie\ArcGIS\python\script_tdc\intersection"
* 1) Normalement la première ligne n'est pas nécessaire car la boîte à outils Analysis Tools est une boîte à outils système donc automatiquement reconnue par ArcGIS. Cette ligne n'est utile à mon sens que lorsque tu créés tes propres boîtes à outils et que tu ne les enregistres pas sous ce répertoire "C:\Program Files\ArcGIS\ArcToolbox\Toolboxes"
* 2) sur ta deuxième ligne concernant le workspace sache que python ne reconnait pas cette syntaxe "\"
il faut soit utiliser "\\" ou "/" ou alors mettre un r devant
ex:
gp.workspace = "D:\\Travail\\Julie\\ArcGIS\\python\\script_tdc\\intersection"
ou
gp.workspace = "D:/Travail/Julie/ArcGIS/python/script_tdc/intersection"
ou
gp.workspace = r"D:\Travail\Julie\ArcGIS\python\script_tdc\intersection"
si tu predns l'exemple de ton script, le chemin d'accès de ta toolbox doit suivre les même règles
gp.AddToolbox("C:\\Program Files\\ArcGIS\\ArcToolbox\\Toolboxes\\Analysis Tools.tbx")
ou
gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx")
ou
gp.AddToolbox(r"C:\Program Files\ArcGIS\ArcToolbox\Toolboxes\Analysis Tools.tbx")
j'espère que cela t'aidera
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#4 Wed 12 November 2008 13:56
Re: [Script] Intersect en Python
Bonjour,
Merci pour vos réponses.
freesnowpetrel :
mes 2 couches sont bien situées dans le bon répertoire.
J'ai modifié mon code suivant vos suggestions :
Code:
# Import system modules import sys, string, os, arcgisscripting try: # Create the Geoprocessor object gp = arcgisscripting.create() gp.workspace = "D:\\Travail\\Julie\\ArcGIS\\python\\script_tdc\\intersection" gp.addmessage("pret...") gp.intersect_analysis("tco_tampons ; tc1", "intersection") gp.addmessage("intersection ok") except: # If an error occurred while running a tool print the messages print gp.GetMessages()
Dans la fenêtre d'exécution du script, je lis "pret..." puis l'exécution s'arrête, sans message d'erreur. Aucune couche n'est créée dans le répertoire de travail.
Avez-vous des idées?
Encore merci,
Julie.
Hors ligne
#5 Wed 12 November 2008 14:05
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [Script] Intersect en Python
si tu remplaces
Code:
gp.intersect_analysis("tco_tampons ; tc1", "intersection")
par
Code:
gp.intersect_analysis("tco_tampons ; tc1", "intersection.shp")
ça donne quoi ?
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#6 Wed 12 November 2008 14:52
Re: [Script] Intersect en Python
Ca donne la même chose.
J'ai aussi essayé de rajouter .shp aux couches de départ, idem.
Sur le site d'ESRI je suis tombée sur des messages de personnes ayant le même problème avec intersect, sans solution ou alors qui ne marche pas chez moi.
Bizarre...
Hors ligne
#7 Wed 12 November 2008 15:06
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [Script] Intersect en Python
as tu pensé à installer les services packs de la version 9.2 ?
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#8 Wed 12 November 2008 15:22
Re: [Script] Intersect en Python
Salut,
Essaie de modifier ton script de cette manière:
Code:
gp.intersect_analysis("tco_tampons.shp;tc1.shp", "intersection.shp")
C'est à dire de rajouter les .shp et d'enlever les espaces entre tes deux couches de départ et le symbole ";", sinon python va croire que ces espaces font partie du nom des couches (et ne pas les trouver dans ton workspace)
Salutation
Vincent
edit : Après une rapide vérification, les espaces ne provoquent pas d'erreurs dans ce cas, désolé
Dernière modification par vagvince (Wed 12 November 2008 15:31)
Hors ligne
#9 Wed 12 November 2008 15:33
Re: [Script] Intersect en Python
Tnarbiv :
J'ai le service pack 4 d'installé, je vais télécharger le 6. Merci du conseil!
vagvince :
Je viens de tester avec tes modifs, mais le résultat est le même. Merci quand même!
Julie.
Hors ligne
#10 Wed 12 November 2008 15:43
- Marie S.
- Participant actif
- Lieu: Paris
- Date d'inscription: 30 Nov 2005
- Messages: 88
Re: [Script] Intersect en Python
Bonjour
Personnellement je n'utilise pas les workspace vu que mes couches sont toujours à des endroits différents. Donc je crée des variables avec le chemin complet vers les couches et voila un exemple bidon de ce que j'utilise pour réaliser des intersections :
Code:
input = "D:\\bv\\hydro_bv.shp ; D:\\clc\\landuse.shp" output = "D:\\result\\hydro_bv_landuse.shp" gp.Intersect_analysis(input, output , "ALL", "", "INPUT")
Je te conseillerais donc d'essayer avec les chemins complets dans un premier temps.
Hors ligne
#12 Wed 12 November 2008 16:02
Re: [Script] Intersect en Python
Bonjour,
Marie S. :
J'ai aussi utilisé cette méthode, sans plus de résultat.
La syntaxe de la commande intersect étant la suivante :
gp.intersect_analysis(couche1;couche2, resultat)
couche1 et couche2 étant les 2 couches en entrée, à séparer par un point virgule.
J'ai donc utilisé le code suivant :
Code:
# Import system modules import sys, string, os, arcgisscripting try: # Create the Geoprocessor object gp = arcgisscripting.create() couche1 = "D:\\Travail\\Julie\\ArcGIS\\python\\script_tdc\\intersection\\tco_tampons.shp" couche2 = "D:\\Travail\\Julie\\ArcGIS\\python\\script_tdc\\intersection\\tc1.shp" couches_entree = couche1 + ";" + couche2 resultat = "D:\\Travail\\Julie\\ArcGIS\\python\\script_tdc\\intersection\\res.shp" gp.addmessage("pret...") gp.intersect_analysis(couches_entree, resultat) gp.addmessage("intersection ok") except: # If an error occurred while running a tool print the messages print gp.GetMessages()
J'ai aussi tenté avec 2 paramètres couche1 et couche2 choisis par l'utilisateur, pour vérifier qu'il n'y ait pas de faute dans les chemins d'accès, mais là encore ça n'a pas marché...
vagvince :
Comment fait-on pour taper en mode interactif? Je n'ai jamais essayé cette méthode.
Merci pour votre aide!
Julie.
Hors ligne
#13 Wed 12 November 2008 16:07
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: [Script] Intersect en Python
Pour ouvrir la fenetre Python :
Demarrer->Programmes->Python2.4->IDLE (Python GUI)
Ensuite tu peux taper ou copier ton script en l'executant ligne apres ligne.
Rodolphe
Hors ligne
#14 Wed 12 November 2008 16:27
Re: [Script] Intersect en Python
Pour compléter Rodolphe. Si tu n'as pas ce dossier, double-cliques sur le fichier python.exe qui se trouve normalement sous c:\\python24
tape ton code ligne par ligne en omettant le "try:" et le "except:"
Hors ligne
#15 Wed 12 November 2008 17:25
Re: [Script] Intersect en Python
Victoire!!
J'ai essayé avec le service pack 6 et cette fois-ci ça marche!
Un grand merci à tous pour votre aide et votre rapidité.
Merci aussi pour m'avoir indiqué comment taper en mode interactif. Je sens que ça va m'être utile pour la suite...
Julie.
Hors ligne