Some PyQGIS tips, from the most common to the most practical, to learn or optimize your use of QGIS with Python.

Pandas logoPandas is an excellent Python librarie to manage data. Matplotlib allows to create advanced charts and Openpyxl is very usefull to read/write Excel files. These 3 tools, combined with other classic Python features, allow to do data analysis and engineering.

First install or check Python and Pip, then the 3 libraries:

pip install pandas
pip install matplotlib
pip install openpyxl

Sous Windows, pour utiliser efficacement psql, shp2pgsql, pgsql2shp, ogr2ogr, Python... Et après avoir installé QGIS (car il embarque GDAL/OGR et PROJ) et/ou MySQL et/ou Postgres, il faudra sans doute préciser quelques variables d'environnement. Ceci pour que Windows puisse accéder à ces outils en ligne de commande. Lignes de commande que vous pourrez ensuite utiliser dans votre langage de programmation préféré (Python, PHP, Java...), permettant donc des combos très puissants.

À savoir 🙂

  • Préférez l'installation classique de QGIS (à l'architecture plus claire il me semble), et non pas l'installateur réseau OSGeo4W (à l'architecture plus complexe). De plus les versions QGIS 3.28.X me semblent avoir une architecture plus simple à comprendre pour identifier les différentes librairies (par rapport aux versions 3.34.X par exemple).
  • Plusieurs versions de Python, Pip et QGIS peuvent co-exister sur votre machine (et co-existeront probablement, lol).
  • Selon les versions de QGIS, les chemins peuvent avoir changé, c'est à vous de les identifier avant de les utiliser dans les variables d'environnement. Les exemples ci-dessous s'inspirent de QGIS 3.28.13 sur Windows 11.
  • Très généralement, Pip est déjà embarqué dans le Python de QGIS (et donc déjà disponible depuis le shell d'OSGeo, mais pas nativement depuis celui de Windows).
  • Il faudra parfois fermer le shell Windows (l'invite de commandes), puis le ré-ouvrir, afin de prendre en compte certaines modifications des variables d'environnement dans ce shell.
  • Si vous avez déjà installé Postgres, il est possible que certaines variables liées à GDAL/OGR et PROJ aient déjà été créées, mais nous allons ici préférer les versions de QGIS, plus claires, modifiez donc les éventuelles variables existantes.
  • On ne touchera ici qu'aux variables système.

GDAL/OGR

Créez une variable GDAL_DATA avec une valeur ressemblant à ces exemples :

C:\Program Files\QGIS [version]\apps\gdal\share\gdal
C:\QGIS [version]\share\gdal

Créez une variable GDAL_DRIVER_PATH avec une valeur ressemblant à ces exemples :

C:\Program Files\QGIS [version]\apps\gdal\lib\gdalplugins
C:\QGIS [version]\bin\gdalplugins

Créez une variable PROJ_LIB avec une valeur ressemblant à ces exemples :

C:\Program Files\QGIS [version]\share\proj
C:\QGIS [version]\share\proj

Ajoutez dans la variable système Path quelque chose comme :

C:\Program Files\QGIS [version]\bin
C:\QGIS [version]\bin

À ce stade, vous devriez pouvoir lancer cette commande dans le shell Windows (l'invite de commandes, après l'avoir relancé s'il était déjà ouvert) :

ogr2ogr.exe --version

Bien, si cela affiche la version de GDAL/OGR, vous allez pouvoir l'utiliser en ligne de commande !

Installateur réseau OSGeo4W

Seulement si QGIS a été installé via l'installateur réseau OSGeo4W (mais j'ai constaté des bugs, ou du moins des difficultés, préférez l'installation classique de QGIS en stand-alone, et donc les variables décrites au-dessus) :

GDAL_DATA = C:\OSGeo4W\share\gdal
GDAL_DRIVER_PATH = C:\OSGeo4W\bin\gdalplugins

MySQL

Éventuellement pour MySQL, ajoutez dans la variable système Path quelque chose comme :

C:\Program Files\MySQL\MySQL Server [version]\bin

À ce stade, vous devriez pouvoir lancer une commande similaire à celle-ci dans le shell Windows (l'invite de commandes, après l'avoir relancé s'il était déjà ouvert, et après avoir mis vos accès) :

ogrinfo MYSQL:"my_db,user=root,password=root,port=3306"

Bien, si cela liste les tables présentes dans votre base de données, vous allez pouvoir l'utiliser en ligne de commande et interagir avec GDA/OGR !

Postgres

Éventuellement pour Postgres et PSQL, ajoutez dans la variable système Path :

C:\Program Files\PostgreSQL\[version]\bin

Ensuite il est courant d'accorder la confiance à son poste local, ce qui simplifiera les lignes de commandes. Pour cela trouvez le fichier pg_hba.conf, qui se trouve dans le répertoire data de votre version de Postgres, ce qui dépendra donc de votre version mais aussi du choix que vous avez fait à l'installation, exemples :

C:\Program Files\PostgreSQL\[version]\data\pg_hba.conf
[disque dur]:\[répertoire customisé]\pg_hba.conf

Ouvrez-le et cherchez la chaîne IPv6 local connections, ou scram-sha-256 (vers la fin du fichier sans doute), et modifiez la METHOD comme suit (scram-sha-256 devient trust) :

# IPv6 local connections:
host all all ::1/128 trust

À ce stade, vous devriez pouvoir lancer ces commande dans le shell Windows (après l'avoir relancé s'il était déjà ouvert) :

pgsql2shp

Bien, si cela liste la version de l'outil et quelques exemples de lignes de commande, vous allez pouvoir exporter des shapes depuis Posgtres, avec moult options !

shp2pgsql

Bien, si cela liste la version de l'outil et quelques exemples de lignes de commande, vous allez pouvoir importer des shapes dans Posgtres, avec moult options !

psql -h localhost -p 5432 -d ma_bdd -U mon_user -c "SELECT * FROM ma_table;"

Bien, si cela affiche votre table, vous allez pouvoir manipuler Posgtres en lignes de commande !

Python

Éventuellement pour Python.

Dans le shell Windows (invite de commandes), vous pouvez d'abord lancer ceci pour vérifier quelles sont les versions de Python existantes sur votre machine :

where python

Puis éventuellement, pour Python, toujours après avoir vérifié que ces chemins existent, et toujours dans la variable Path de vos variables système, ajoutez quelque chose comme :

C:\Users\[user]\AppData\Local\Programs\Python\Python39

Pour lancer Python depuis le shell Windows (invite de commandes) :

python
py
python3

Pip

À l'installation de Pip via le shell Windows (un tutoriel ici), il vous proposera sans doute de se mettre à jour et de l'enregistrer dans la variable Path, faîtes donc, en plus il vous fournira le bon chemin.

Éventuellement, pour Pip et d'autres scripts importants, toujours après avoir vérifié que ces chemins existent, toujours dans la variable Path de vos variables système, ajoutez quelque chose comme :

C:\Users\[user]\AppData\Roaming\Python\Python39\Scripts

Et/ou :

C:\Users\[user]\AppData\Local\Programs\Python\Python39\Scripts

À ce stade, et après avoir redémarré le shell Windows et/ou celui de OSGeo, vous devriez pouvoir y installer des librairies de ces façons par exemple :

python install wikipedia
python -m pip install wikipedia
python -m pip install wikipedia --user

Divers

Dans cet autre article se trouve un chapitre sur l'installation de modules Python tiers dans QGIS (depuis le Pip du shell d'OSGeo).

Dans cet autre article se trouve une série de pratiques pour traiter des données avec Python, Pandas, Geopandas... y compris dans des BDD SQL, y compris avec une composante géographique.

Acymailing est une extension Joomla permettant de mettre en place des outils newsletter du plus simple au plus puissant (filtres, vitesses d'envoi, tracking, stats, relai SMTP...). Ce système open-source existe en version gratuite (déjà très performante) ou payante (très abordable). L'extension peut bien sûr être overridée.

Cependant son développement régulier rend l'utilisation des overrides plus lourd que la modification directe du code source. En effet dans certains contextes (multi-utilisateurs, multi-bases, flotte d'outils...), les overrides risquent d'être complexes à maintenir dans le temps.

C'est en tout cas mon impression en utilisation intensive d'Acy. Certaines MAJ peuvent toucher les fichiers originaux et ne pas être prises en compte dans vos overrides... Mieux vaut donc connaître un minimum le code de l'extension et avoir quelques repères.

Ici quelques notes personnelles me permettant de maintenir facilement mes outils. Rappellons l'ancien forum encore en ligne d'où proviennent certaines de ces astuces (le support a évolué vers un système plus personnalisé).

emc1

Cet article est principalement destiné aux joomlistes avancés souhaitant personnaliser ou optimiser leurs applications newsletter.

Le paragraphe Quelques liens s'adresse généralement à tous webworkers digitaux (marketeurs, intégrateurs, graphistes...).

Le paragraphe Relai SMTP évoque  le relai Elastic Email en contexte de mass sending.

Et non, je ne travaille pas pour eux.

Exemple d'interface cartographiqueFabrik est une (excellente) extension gratuite et open-source disponible sur Joomla, et permettant de construire des applications de bases de données. Un article présentant globalement le CCK Fabrik est déjà disponible sur ce site.

L'article ci-dessous est plus détaillé, et regroupe une série de pratiques courantes ou avancées, mais peu documentées en français. L'article reprend aussi des fonctionnalités PHP classiques mais ici adaptées à l'API Joomla.

Bien sûr cette page n'a rien d'exhaustif, et ne pourrait exister sans le forum Fabrik. Merci encore à toute l'équipe Fabrik et au projet Joomla. Et non, je ne travaille pas pour eux.

J'ai régulièrement besoin d'organiser le transfert des données de sites Joomla vers une copie de ces sites, pour plusieurs raisons (nettoyage, mise-à-jour, sauvegardes spécifiques, évolutions...).

Là-dessus, vous allez me dire : beh euuuh, tu connais pas Akeeba ? Si si, je connais, et je valide. J'utilise AkeebaBackup sur tous mes sites Joomjoom, à des fins de sauvegardes. Mais ça ne correspond pas à tous mes besoins. Soit trop lourd, soit trop spécifique, soit trop long...

Imaginez par exemple que vous souhaitiez préparer la nouvelle version d'un site - en modifiant des menus, modules, catégories, etc - tout en y insérant les données du site en production😎Pas simple hein ? Maintenir la cohérence des données tout en travaillant sur les évolutions est un vrai défi, et Akeeba ne fait plus du tout l'taf.

Il s'agit donc de transférer les données cœur de Joomla : articles, catégories, tags, utilisateurs, groupes, droit d'accès, etc - comprenant également certaines tables, lignes ou valeurs spécifiques : id super-utilisateur, #_assets, #_ucm, #_workflows, etc - sans toucher aux données structurelles de Joomla. Ce qui peut être un sacré bazar, car Joomjoom a parfois ses raisons que l'amour irradie... ou ignore... ou... bref🥴

De plus, dans certains cas, ce n'est pas seulement les données cœur que je souhaite transférer, mais aussi certaines tables métiers, créées à côté de Joomla (avec Fabrik par exemple).

Dans d'autres cas, j'ai besoin de le faire régulièrement, parfois même très, très, très régulièrement😥: pour tester des templates, des mises-à-jour suspectes, des triggers SQL... Avec donc le besoin d'être rapide et depouvoir vidanger le site de destination à chaque opération.