Suite

Sélection de tous les fichiers du répertoire pour la fusion dans QGIS Processing ?

Sélection de tous les fichiers du répertoire pour la fusion dans QGIS Processing ?


J'écris un script générique qui consiste à écrire des fichiers de formes dans un répertoire qui sont ensuite fusionnés. Après avoir écrit les fichiers dans le Production dossier, j'essaie d'obtenir le saga:fusionner les calques de formes algorithme pour fusionner tous les fichiers du Production dossier. J'ai utilisé Model Builder et bien qu'il soit utile dans une certaine mesure, je trouve qu'il est utilisé à des fins spécifiques alors que j'essaie de créer un script à des fins génériques.

Code:

##Test=nom ##Select_folder=dossier ##Result=output vector import os import glob path_1 = Select_folder path = path_1 os.chdir(path) def function(): output = glob.glob(path_1 + './*. shp') x = 0 tandis que output[x] : pour fname dans glob.glob("*.shp") : output_1 = processing.runandload("qgis:fieldcalculator", output[x], 'Number', 1, 10 , 0, True, 1 , "C:UsersMeDesktopOutput" + fname) multiple_0 = glob.glob("*.shp") x = x + 1 if x + 1 > len(output) : processing.runalg("saga:mergeshapeslayers", output[0], ";".join(multiple_0) , Result) break else: continue if path_1: function() else: pass

Vous pouvez simplifier votre script sans utilisertandis que…etX,x+1: pour une simple liste Python, il serait préférable d'utiliserpourou des compréhensions de liste :

##Test=nom ##Select_folder=dossier ##Result=output vector import os import glob # chemin du dossier de Result shapefile path_res = os.path.dirname(Result) # aller à Select_folder os.chdir(Select_folder) # copier les shapefiles (vous n'avez pas besoin de charger les fichiers de formes, utilisez donc runalg) pour fname dans glob.glob("*.shp") : output_1 = processing.runalg("qgis:fieldcalculator", fname, 'Number', 1, 10 , 0, True, 1 , path_res + "/"+ fname) # chemins des fichiers de formes dans le dossier Result avec la sortie de compréhension de liste = [path_res + "/"+ shp pour shp dans glob.glob("*.shp") ] # fusionner les shapefiles processing.runalg("saga:mergeshapeslayers", output[0], ";".join(output) , Result)

Quelques explications :

# chemin du dossier du fichier de forme du résultat # = path_res print os.path.dirname("/Users/Shared/test.shp") /Users/Shared # list comprehension print [shp pour shp dans glob.glob("*.shp" )] ['shape1.shp', 'shape2.shp',… , 'shapen.shp'] print [path_res + "/"+ shp pour shp dans glob.glob("*.shp")] ['/Users /Shared/shape1.shp', '/Users/Shared/shape2.shp',… ,'/Users/Shared/shape.shp']

ou mieux avecos.path.join(universel, Windows, Linux, Mac OS X) :

print [os.path.join(path_res, shp) pour shp dans glob.glob("*.shp")] print [os.path.join(path_res, shp) pour shp dans glob.glob("*.shp" )][0] # = sortie[0] /Users/Shared/shape1.shp

J'ai trouvé la réponse grâce à @gene dont les commentaires m'ont aidé à me concentrer sur le bon domaine. Il suffisait simplement d'utiliser glob pour le saga:fusionner les calques de formes fonction à appeler :

multiple_0=glob.glob("*.shp")

Ajouté ceci au code ci-dessus qui fusionne maintenant tous les fichiers du dossier.


Voir la vidéo: Qgis Merge Rasters