[Qgis – Fonctions avancées du composeur d’impresssion ] Utiliser l’éditeur de fonction python pour afficher des sommes

Le composeur d’impression de Qgis a longtemps été son point faible, notamment par rapport à ceux des produits d’Esri.

Depuis quelques versions cependant il s’étoffe, notamment sur le volet Atlas (que l’on verra prochainement).

Pour autant certaines fonctions ne sont pas (encore) implémentées, comme par exemple la possibilité d’afficher la somme d’une donnée, d’une couche dans le composeur d’impression.

Heureusement depuis la version 2.8, un éditeur de fonction python permet de charger ses propres fonctions dans l’éditeur d’expression. Grasse à cette possibilité nous allons pouvoir remédier à ce manque.

1- Une somme vous avez dit une somme ?

Mon problème est le suivant : j’ai une couche des communes d’un  département avec la population 2016.

J’ai dupliqué la couche avec un tri pour avoir celles qui dépassent 10 000 hab. en rouge.

Dans le composeur, je voudrait afficher la somme de la population totale .

explication_compos

Dans le composeur d’impression, impossible de sommer une donnée

 

Or si on peut afficher dans le composeur une table d’attribut avec les champs et leurs valeurs, impossible d’en faire la somme.

2- un éditeur de fonction python pour les gouverner tous

Heureusement  il y a dans la calculatrice de champs  un onglet « éditeur de fonctions » qui permet d’insérer du code python.

l’éditeur est assez simple :

  • un onglet à gauche qui les recensent tous
  • un onglet à droite avec un éditeur python intégré

sommechamps1

Nous allons donc charger un fonction appelé sommechamps  qui va effectuer l’opération. Cette fonction est donc en python et utilise la bibliothèque python de qgis : Pyqgis.

notez que l’on passe en paramètre de fonction le nom de la couche (layername) et ne nom du champ (fieldname).

Une fois la fonction chargée on l’appelle simplement dans l’onglet expression avec les paramètres voulu comme un autre fonction qgis native. Ici il s’agit de la couche Toutes les Communes et du champ popul_2016.

sommechamps2

Et voilà la résultat si on l’intègre dans une étiquette du composeur de Qgis.

sommechamps3

On peut utiliser cette fonction pour faire la somme d’une table d’attributs comme celle de nos 5 communes de plus de 10 000 habitants par exemple.

sommechamps4

Bon à savoir si vous voulez renommer, supprimer des fonctions, ou encore les éditer avec un autre éditeur python :  celles-ci sont stockées dans le répertoire .qgis2 (sous linux) ou dans le local data/qgis2 sous ouiouin

Notez la compilation en bytecode python (.pyc) qui s’effectue automatiquement quand on charge le fichier de code python (.py) dans l’éditeur de fonction de Qgis.

sommechamps_url

3- Dans les étiquettes aussi…

Notez enfin que ces fonctions sont utilisable partout où la calculatrice de champs sévit, comme dans les étiquettes par exemple.

Ici on va utiliser la fonction  somme totale des habitants du département – celle du champ population de la commune :

sommechamp-etiq1

et voilu le résultat !

un peu abstrait comme exemple mais il peut servir !! 🙂

sommechamp-etiq2

 

 

 

3 thoughts on “[Qgis – Fonctions avancées du composeur d’impresssion ] Utiliser l’éditeur de fonction python pour afficher des sommes

  1. Michael dit :

    Pretty great post. I just stumbled upon your blog and wished to say that I’ve really enjoyed surfing around your weblog posts. In any case I will be subscribing to your feed and I am hoping you write again soon!

  2. stéphane dit :

    Ce tuto est très utile mais depuis que je suis passé à QGIS 3, cela ne fonctionne plus, avez vous une idée?

    • ymr dit :

      Bonjour Stéphane,

      depuis quelques version plus la peine la fonction format_number( champs, nbr de décimale ) le fait de base.

      Mais le méthode reste valable si tu veux créer d’autres scripts

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.