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 Wed 30 August 2023 09:27

insay
Participant occasionnel
Date d'inscription: 23 Mar 2018
Messages: 25

QGIS: Script pour diviser une couche en fonction d'un attribut

Bonjour à tous,

J'ai pour objectif de diviser une couche selon un de ses attributs "MODE_POSE", il y a toujours 9 valeurs (de 0 à 8), à la base je le faisais a la main via la boite à outils "Extraire par attribut". Je vais devoir faire cette manip pour des centaines de fichiers assez souvent j'ai donc fait appel a une IA pour qu'elle me code un script me facilitant la tache.

le seul problème c'est que la fonction fait bien 9 couches distinctes mais c'est l'exact copie de la couche d'entrée a chaque fois, voici le code en question

Code:

from qgis.core import QgsProject, QgsVectorLayer, QgsVectorFileWriter, QgsCoordinateTransformContext

input_layer_name = "Ma_Couche"
output_directory = "Exemple\MonDossier"

mode_values = {
    0: "Couche_1",
    1: "Couche_2",
    2: "Couche_3",
    3: "Couche_4",
    4: "Couche_5",
    5: "Couche_6",
    6: "Couche_7",
    7: "Couche_8",
    8: "Couche_9"
}

input_layer = QgsProject.instance().mapLayersByName(input_layer_name)[0]
if not input_layer:
    print(f"La couche {input_layer_name} n'a pas été trouvée.")
    exit()

for mode_value, output_name in mode_values.items():
    query = f'"MODE_POSE" = {mode_value}'
    filtered_layer = QgsVectorLayer(input_layer.source(), input_layer_name, 'ogr')
    filtered_layer.setSubsetString(query)
    
    options = QgsVectorFileWriter.SaveVectorOptions()
    options.driverName = "ESRI Shapefile"
    output_path = f"{output_directory}/{output_name}.shp"
    
    success, message = QgsVectorFileWriter.writeAsVectorFormatV2(filtered_layer, output_path, QgsCoordinateTransformContext(), options)
    
    if success == QgsVectorFileWriter.NoError:
        print(f"Export de {output_name} réussi.")
    else:
        print(f"Erreur lors de l'export de {output_name} : {message}")

print("Export terminé.")

Est ce que l'un d'entre vous aurez une idée de ce qui cloche avec cette fonction ?

Dernière modification par insay (Wed 30 August 2023 09:45)

Hors ligne

 

#2 Wed 30 August 2023 12:04

Vincent Vauchey
Participant assidu
Lieu: saint jean de braye
Date d'inscription: 24 Jan 2006
Messages: 288

Re: QGIS: Script pour diviser une couche en fonction d'un attribut

Bonjour

Pourquoi avant de demander à une IA de faire le travail, ne pas tout simplement utilise le modeleur graphique afin de faire cela !!!!!

Cordialement

Hors ligne

 

#3 Wed 30 August 2023 14:46

insay
Participant occasionnel
Date d'inscription: 23 Mar 2018
Messages: 25

Re: QGIS: Script pour diviser une couche en fonction d'un attribut

Désolé je ne connaissais pas le modeleur graphique et je pensais que ce que je cherchais ne pouvais se faire qu'avec un script, je vais jeter un œil sur la documentation Qgis pour utiliser le modeleur graphique et voir ce que je peux faire. Merci à toi Vincent

Hors ligne

 

Pied de page des forums

Powered by FluxBB