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

#1 Thu 09 December 2010 09:56

Vincent87
Participant actif
Date d'inscription: 26 Jun 2006
Messages: 113

Traitement par Lots

Bonjour à tous,

Petit besoin sur une question dont je ne trouve pas la réponse.

Je souhaite lancer sur une arborescence comptant 200 dossiers contenant 20 shapes chacun, l'outil de correction de géométrie se trouvant dans mon arctoolbox préféré. Afin de corriger tous les shapes avant un import.

Soucis je ne sais comment faire, et n'ai pas trouvé de reponse par mes propres recherches.

La solution serait de tout faire à la main...mais j'en ai pour une éternité...le traitement par lots même long serait largement plus confortable pour moi ^^

Si l'un d'entre vous à déjà fait se genre de manipulation je suis preneur !

Merci de votre aide.

Hors ligne

 

#2 Thu 09 December 2010 10:20

n314
Participant assidu
Date d'inscription: 6 Sep 2005
Messages: 699

Re: Traitement par Lots

En réponse one shot rapide:
1) regarder la syntaxe de l'outil en ligne de commande correction de géométrie
2) lister les shapes (avec leur chemin d'accès): sous dos utiliser dir avec l'argument /s et le filtre *.shp, le tout redirigé (signe >) dans une fichier texte (ex: http://stackoverflow.com/questions/2376801)/recursive-directory-listing-in-dos)
3) sous un tableur, créer assembler syntaxe et liste des fichier pour créer la liste des commandes
4) copier/coller cette liste et boire un café.

Dernière modification par n314 (Thu 09 December 2010 10:21)

Hors ligne

 

#3 Thu 09 December 2010 10:59

Vincent87
Participant actif
Date d'inscription: 26 Jun 2006
Messages: 113

Re: Traitement par Lots

merci du coups de pouce je vais regarder ça de près !

Hors ligne

 

#4 Thu 09 December 2010 13:27

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

Re: Traitement par Lots

Salut, la arctoolbox ne fait pas de dos si je ne m'abuse....

Lister récursivement en dos c'est pas très adapté mais en python j'avais tester un truc pour tous intégrer en géodatabase personnel à partir de la racine d'un répertoire.

voilà le script python:

Code:

# -*- coding:Latin1 -*-

#Import Standard library modules
import sys, os
try:
    #pour les utilisateurs ArcGIS 9.2/9.3
    import arcgisscripting
    gp = arcgisscripting.create()
    print "\n" + "Utilisation de ArcGIS 9.2 ou supérieure avec arcgisscripting..." + "\n"
    gp.AddMessage("\n" + "Utilisation de ArcGIS 9.2 ou supérieure avec arcgisscripting..." + "\n")
except:
    #pour les utilisateurs ArcGIS 9.0/9.1
    import win32com.client
    gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
    print "\n" + "Utilisation de ArcGIS 9.0/9.1 ou supérieure avec win32com.client.Dispatch..." + "\n"
    gp.AddMessage("\n" + "Utilisation de ArcGIS 9.0/9.1 ou supérieure avec win32com.client.Dispatch..." + "\n")

def listFiles(dir_name, subdir, *args):
    '''Return a list of file names found in directory 'dir_name'
    If 'subdir' is True, recursively access subdirectories under 'dir_name'.
    Additional arguments, if any, are file extensions to match filenames. Matched
        file names are added to the list.
    If there are no additional arguments, all files found in the directory are
        added to the list.
    Example usage: fileList = dirEntries(r'H:\TEMP', False, 'txt', 'py')
        Only files with 'txt' and 'py' extensions will be added to the list.
    Example usage: fileList = dirEntries(r'H:\TEMP', True)
        All files and all the files in subdirectories under H:\TEMP will be added
        to the list.
    '''
    fileslist = []
    for file in os.listdir(dir_name):
        dirfile = os.path.join(dir_name, file)
        if os.path.isfile(dirfile):
            if not args:
                fileslist.append(dirfile)
            else:
                if os.path.splitext(dirfile)[1][1:] in args:
                    fileslist.append(dirfile)
        # recursively access file names in subdirectories
        elif os.path.isdir(dirfile) and subdir:
            print "Accès au répertoire :", dirfile
            fileslist.extend(listFiles(dirfile, subdir, *args))
    return fileslist



# MAIN
if __name__ == '__main__':

    # Allow output file to be overwritten if it already exists
    gp.OverwriteOutput = 1


    #Arguments
    #startdir = sys.argv[1]#à l'ancienne
    startdir = gp.getparameterastext(0) 'localisation racine
    subdir = gp.getparameterastext(1) 'true pour la récursivité 
    #startdir = "D:\temp"
    #subdir = True

    filetype = 'shp' #filtre de type d'extension à prendre en compte dans le listing
try:
    print "*"*10
    print "Processus : conversion des shapes contenu dans \n" + startdir
    gp.AddMessage("*"*10)
    gp.AddMessage("Processus : conversion des shapes contenu dans \n" + startdir)

    #Lister des fichiers à insérer en base
    myFileList = []
    myFileList = listFiles(startdir, subdir, filetype);
    
    #Recupere l espace de travail
    for f in myFileList:
        filepath = os.path.dirname(f);
        filename = os.path.basename(f).split(".")[0];
        fileext = os.path.basename(f).split(".")[1];

        #traitement sur le fichier
        print "export du fichier :", os.path.basename(f)
        gp.AddMessage("export du fichier :" + os.path.basename(f))
        gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/[b]TOOLBOX.tbx[/b]")
        [b]ici ton traitement[/b]


    
    print "Processus : Fin du traitement"
    print "*"*10
    gp.AddMessage("Processus : Fin du traitement")
    gp.AddMessage("*"*10)
    

except:
    gp.AddMessage(gp.GetMessages(2))
    print gp.GetMessages(2)

comme ça tous sera intégrer dans arc catalogue

Dernière modification par gglafouine (Thu 09 December 2010 13:28)


Jérôme

Hors ligne

 

#5 Thu 09 December 2010 14:02

Vincent87
Participant actif
Date d'inscription: 26 Jun 2006
Messages: 113

Re: Traitement par Lots

le python je maitrise pas trop trop donc je vais galérer mais je vais jeter un coups d'oeil quand même !


Merci ^^

Hors ligne

 

#6 Thu 09 December 2010 14:26

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Traitement par Lots

Hello,

Beaucoup plus simple, si on parle bien de cet outil :

1. Tu ouvres l'outil de recherche windows, et tu lances sur l'ensemble de tes 200 répertoires une recherche de *.shp
2. Tu clic droit sur l'outil dans l'arctoolbox et tu sélectionnes  "traitement par lot" (ou un truc équivalent à Batch en anglais)

[img]http://img526.imageshack.us/img526/433/batch.jpg[/img]

3. Tu sélectionnes tous tes résultats de recherche et tu les déplaces dans ta boite de traitement par lot (la souris devrait avoir une icone spécifique avec un "+")

Et hop, il n'y a plus qu'à envoyer smile

Hors ligne

 

#7 Thu 09 December 2010 14:34

gglafouine
Participant actif
Lieu: Montpellier
Date d'inscription: 28 Feb 2006
Messages: 118

Re: Traitement par Lots

Perso, je dirai que la maitrise arrive seulement en pratiquant.

Il y a des doc sur comment mettre en place un géotraitement sur le net en utilisant arcgisscripting.

C'était mon premier script.... donc je peux dire que c'est accessible et polyvalent et que ça évite d'utiliser un processus manuel et donc d'insérer d'éventuelle erreur de manipulation.

ps : avec python tu peux tous exécuter sans lancer Arcatalog ou Arcmap. C'est pratique quand tu n'as pas énormément de ressource mémoire ou qui tu veux faire des traitements programmés.


Jérôme

Hors ligne

 

#8 Thu 09 December 2010 14:47

Vincent87
Participant actif
Date d'inscription: 26 Jun 2006
Messages: 113

Re: Traitement par Lots

merci Robin pour cette astuce, je test de suite.
GGlafouine ouaip je sais que l'on devient forgeron en forgeant alors je vais m'y mettre petit à petit ^^

Merci de votre aide !

Hors ligne

 

#9 Thu 09 December 2010 14:51

n314
Participant assidu
Date d'inscription: 6 Sep 2005
Messages: 699

Re: Traitement par Lots

Robin a écrit:

Hello,

Beaucoup plus simple, si on parle bien de cet outil :

1. Tu ouvres l'outil de recherche windows, et tu lances sur l'ensemble de tes 200 répertoires une recherche de *.shp
2. Tu clic droit sur l'outil dans l'arctoolbox et tu sélectionnes  "traitement par lot" (ou un truc équivalent à Batch en anglais)

http://img526.imageshack.us/img526/433/batch.jpg

3. Tu sélectionnes tous tes résultats de recherche et tu les déplaces dans ta boite de traitement par lot (la souris devrait avoir une icone spécifique avec un "+")

Et hop, il n'y a plus qu'à envoyer smile


ca revient au même que ma propostition mais c'est effectivement plus simple...

Hors ligne

 

#10 Thu 09 December 2010 15:51

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Traitement par Lots

Je faisais référence au codage surtout. Le coup de la recherche windows qui est commun à nos deux méthodes est très pratique, mais ta méthode via Excel est plus adaptée lorsqu'il y a passage de paramètres différents en fonction des fichiers et pour les requêtes plus complexes passées via la boîte de commandes (qui me fait penser à la fenêtre Mapbasic, d'ailleurs smile ).

Dans le cas de cet outil en particulier, il n'y a rien à indiquer spécifiquement, c'est la principale différence wink

Hors ligne

 

#11 Thu 09 December 2010 16:23

n314
Participant assidu
Date d'inscription: 6 Sep 2005
Messages: 699

Re: Traitement par Lots

Robin a écrit:

Je faisais référence au codage surtout. Le coup de la recherche windows qui est commun à nos deux méthodes est très pratique, mais ta méthode via Excel est plus adaptée lorsqu'il y a passage de paramètres différents en fonction des fichiers et pour les requêtes plus complexes passées via la boîte de commandes (qui me fait penser à la fenêtre Mapbasic, d'ailleurs smile ).

Dans le cas de cet outil en particulier, il n'y a rien à indiquer spécifiquement, c'est la principale différence wink


pas de critique dans mon propos et entièrement d'accord avec ta proposition... A force d'avoir à faire des choses complexes, on en oublie la simplicité!

Hors ligne

 

Pied de page des forums

Powered by FluxBB