Nous allons voir les 1ères opérations de prise en main de QGIS. QantumGIS n'est que la partie émergée d'un système très performant : le couple QGIS-PostGIS, que nous aborderons.
Nous prendrons même le temps de taper quelques lignes de SQL, directement dans QGIS.
QGIS, logiciel SIG open-source et gratuit, se télécharge puis s'installe aisément après avoir vérifié la binarité de votre machine. Nous travaillerons ici sous Windows et sur la version 2.18.12 (Las Palmas).
Cette dernière version déposera un répertoire sur votre bureau. Explorez-le, QGIS est aujourd'hui composite et vous n'avez pas installé que ce seul SIG.
Dans la foulée installez PostgreSQL et son interface de gestion PgAdmin 4, via le pack EnterpriseDB et l'utilitaire StackBuilder. Pensez à bien sélectionner l'installation de PostGIS également. Stackbuilder est toutefois un logiciel qui va s'installer sur votre machine, et que vous pourrez ré-utiliser par la suite.
Le sommaire de droite et la navigation sous le texte vous permettent de vous déplacer dans ce tuto. Les images sont cliquables et contiennent des informations supplémentaires. Les liens de cet article affichent à leur survol des informations supplémentaires (tout comme les jolis boutons de QGIS d'ailleurs). Une page d'actuces pour Postgres vous servira peut-être à travers ce tuto.
Rappels sur les bases de données relationnelles
Dans le cadre de la découverte de QGIS, qui n'est qu'une interface de visualisation/manipulation de données spatiales (GUI, Graphic User Interface), on peut revoir rapidement l'intérêt à passer des tableurs aux bases de données relationnelles.
Ci-dessous l'exemple d'un fichier Excel truffé d'erreur de conception (d'un point de vue BDD s'entend), nommé Mes beaux utilisateurs, contenant des humains, des métiers et des adresses. Celui-ci gagnerait à être divisé en au moins deux tables : users et address. En effet une base applicative doit considérer chaque ligne (chaque enregistrement) comme une occurence propre (une identification, un événement...). Or techniquement ou même dans la vraie vie, une adresse a-t-elle la même valeur qu'un nom ? Sont-ils intimement et éternellement liés ? Non.
Souvent, l'une des questions à se poser est : quelles sont les informations qualitatives réellement liées aux objets décrits ? Ainsi une adresse peut changer, un nom beaucoup moins.
Quelques intérêts du fonctionnement en bases de données relationnelles : amélioration des performances d'affichage, amélioration des performances de requêtage, minimisation/rationnalisation des doublons, minimisation des champs vides, mises-à-jour en cascade...
Ainsi une BDD applicative (sous-jacente à un site web, une application métier...) peut être vue non pas comme un gigantesque tableau, mais plutôt comme une constellation de petits tableaux reliés entre eux. Et pour les relier, on utilisera des jointures basées sur des champs contenant des valeurs communes (des identifiants, un champ id typiquement).
Profitez du passage à la dimension relationnelle pour acquérir de bonnes pratiques : pas d'espace ni de caractères spéciaux dans les noms d'objets BDD, des noms courts et évocateurs, 1ère ligne contenant les noms de champs...
Exercice
À partir des informations déjà présentes dans ces données, dessinez une 3ème puis une 4ème table relationnelle1.
Plus difficile : imaginez et dessinez une méthode relationnelle permettant de totalement évincer les doublons de la table address2.
1 Une table speciality par exemple, puis une table country.
2 Il s'agit de passer par une table intermédiaire entre les users et les address.
À propos des shapes
Le format shape est devenu un standard dans les logiciels SIG, c'est le format principal de fichier vecteur que nous utiliserons dans QGIS. Les fichiers shapes sont des fichiers de données spatiales vectorielles (des coordonnées). Par opposition aux rasters, qu'on peut comparer à des images spatialisées.
Téléchargez le shape de la base des communes GeoFla sur le site de l'IGN (Édition 2016 V2.2 France métropolitaine - une archive du fichier utilisé est aussi en PJ de cet article).
Le fichier qui nous intéresse est dans 1_DONNEES_LIVRAISON_2016-06-00236 puis GEOFLA_2-2_SHP_LAMB93_FR-ED161 et enfin le répertoire COMMUNE qui contient 2 shapes.
Un fichier shape est constitué d'un fichier .shp (contient les géométries) et est toujours accompagnés d'autres fichiers mentionnant sa projection (.prj), ses données attributaires(.dbf) et parfois d'autres.
Les données attributaires sont les informations non-spatiales des données, qu'on affichera comme dans un tableur dans QGIS, mais dont le fichier peut aussi être accédé sous le tableur OpenOffice.
Notes : pensez si besoin à demander à Windows d'afficher les extensions des fichiers dans Organiser/Options des dossiers et de recherche/Affichage, puis décochez Masquer les extensions des fichiers dont le type est connu.
Exercice
Ouvrez le fichier attributaire hors SIG, via un tableur puis via un éditeur.
Ouvrez maintenant votre joli shape des communes sous QGIS tel un fichier vecteur (une option de la barre latérale de gauche).
Ouvrir un shape
Ouvrez QGIS, qui vous gratifiera sans doute d'une Astuce au démarrage. Par défaut de nombreuses barres de menus sont présentes, dont une verticale à gauche vous permettant d'ouvrir des formats de données, des BDD ou d'éditer des fichiers vecteur (des shapes).
Ouvrez votre shape dézippé (en choisissant le fichier .shp).
Explorez ses données attributaires (après clic-droit sur la couche).
Exercice
- Testez le Zoom, puis le Zoom précédent.
- Testez les différents modes de sélection géographique (la flèche déroulante du mode Sélection de la barre d'outil).
- Parvenez à désélectionner.
- Testez le zoom sur la sélection à partir de la table attributaire. Filtrez la table attributaire sur la sélection.
- Testez l'identification d'entité.
- Modifiez la couleur par défaut du shape par la couleur officielle exacte du site du Master. Mettez également un peu de transparence sur la couche et épaississez les contours des entités.
- Mesurez une distance arbitraire (à main levée).
Le gestionnaire d'extensions
Repérez le Gestionnaire d'extensions, outil pratique par lequel nous pouvons télécharger et installer les nombreux plugins déjà existants pour QGIS. Dans le menu principal, allez dans Extensions/Installer/gérer les extensions. N'hésitez pas à l'explorer, et à installer le plugin Openlayers par exemple.
Repérez l'option Recharger les dépôts, dans Paramètres, si les extensions non-installées n'apparaissent pas.
Exercice
- Positionnez correctement un fond de carte Google et OSM.
- Testez l'extension StreetView.
- Testez l'extension Online routing Mapper.
- Testez l'extension GeoCoding.
Ouvrir un WMS
Il y a plusieurs façons d'ajouter des fonds de carte WMS dans un projet QGIS, mais en utilisant l'option Ajouter un WMS (barre latérale de gauche).
Allez chercher le serveur GeoSignal par exemple, ou un serveur IGN, puis ouvrez les couches Raster France 1/4000000, la couches des Régions, des Autoroutes et des Routes Nationales.
Vous pouvez également taper directement l'URL d'un flux. Essayez avec un WFS de l'IFREMER.
Autrement, si vous avez correctement installé l'extension OpenLayers, vous pouvez appeler une couche Google Maps ou OpenStreetMap via l'onglet Internet/OpenLayers plugin.
Créer un shape
Fouillez les options disponibles dans la barre latérale de gauche. Créez un shape de type point nommé mes_poi, avec un champ name et un champ resume.
Une fois créé, vous passez en mode Édition sur cette couche grâce au petit crayon, de nouvelles icones d'édition seront disponibles.
De même, crez un shape de type polygone nommé mes_zones ; et un autre de type ligne nommé mes_trajets.
Calcul de champs et classification
Calculer la densité de population des communes dans un nouveau champ, en habitants par km2. Attention le champ Superficie est en hectares.
- Créez un nouveau champ densite après clic droit sur la couche/Propriétés/Champ.
- Dans la calculatrice de champ :
"POPULATION" / ( "SUPERFICIE" /100)
Testez les différentes classifications disponibles sur ce nouveau champ densite, dans les Propriétés/Style/Gradué/Mode.
- Vous pouvez inverser les classifications.
- Vous pouvez ajouter des classes.
- Vous pouvez directement modifier les classes en double-cliquant sur les valeurs.
Afin de mieux faire connaissance avec la calcuculatrice de champs, recalculez la surface des communes.
- Comparez avec le champ Superficie déjà existant.
- Utilisez les Préférences d'options cartographiques pour modifier vos unités de mesure.
Créer une carte
Pour créer une carte, utiliser le composeur d'impression (Dans l'onglet Projets du menu principal).
- Commencez par ajouter un Nouveau composeur d'impression, et donnez lui un nom. Une sur-fenêtre s'ouvre.
- Ajoutez ensuite une portion de la carte courante dans le composeur, avec l'onglet Mise en page/Ajouter une carte.
- Article de la documentation QGIS décrivant les fonctions du composeur d'impression.
- Exercice pratique très détaillé sur l'utilisation du composeur.
- Entraînez-vous à créer des cartes complexes avec le projet zippé Natural Earth de QGIStutorials.
Géo-traitements
Un géo-traitement est une opération sur les géométries, visant le plus souvent à croiser 2 géométries (typiquement, 2 shapes) pour en obtenir une 3ème (générer un nouveau shape des résultats par exemple).
L'onglet Vecteur/Outils de géotraitements vous ménera vers les traitements les plus courants, mais il y en a bien d'autres.
N'hésitez pas à explorer et tester les géo-traitements, sur des géométries simples pour commencer et surtout, pour vérifier vos résulats.
Exercice
Téléchargez puis ouvrez sur QGIS les shapes des communes d'Île-et-Vilaine et des Côtes-d'Armor et celui des rivières bretonnes. Calculez la longueur cumulée des rivière en Île-et-Vilaine. Attention piège sur le géo-traitement entre projections différentes.
Accès distants FTP, MySQL et PostGIS
Demandez/vérifiez vos accès distants FTP, MySQL et PostGIS. Prenez bien note de vos mots de passe, des URL d'accès et des logiciels libres associés (PhpMyAdmin, PgMyAdmin, PgAdmin, HeidiSQL...). Notez que pour des raisons de sécurité de l'Université de Cergy, certains ports sont bloqués (via les logiciels par exemple), les bases restent toutefois accessibles via leurs outils d'administration web, même depuis l'Université.
- Host FTP : ftp-master-geomatique.alwaysdata.net
- Service FTP Alwaysdata si besoin : http://net2ftp.alwaysdata.com/index.php
- URL d'accès des FTP : http://master-geomatique.net/etudiants/[NUMÉRO]
- Host Postgres : postgresql-master-geomatique.alwaysdata.net
- URL Postgres PhpPgAdmin : https://phppgadmin.alwaysdata.com/
- Host MySQL : mysql-master-geomatique.alwaysdata.net
- URL MySQL PhPMyAdmin : https://phpmyadmin.alwaysdata.com/
KML et API Google Maps
Exportez vos shapes personnalisés en KML, ouvrez-les dans Google Earth puis affichez-les dans une page web.
- Conservez la symbologie lors de l'export.
- Si vos KML ne sont pas intègres, trouvez ici un fichier zippé contenant 3 KML.
- Utilisez votre espace FTP personnel.
- Inspirez-vous de la carte en bas du site du Master.
PostGIS
Importez le Fichier SQL GMV pour PostGIS dans votre base PostGIS.- Utilisez Notepad ou le bloc-note pour modifier le propriétaire (owner).
- Vérifiez l'intégrité de la couche en l'ouvrant dans QGIS et en la supersposant à un WMS.
- Une page d'astuces pour Postgres est disponible sur ce site.
Importez un shape dans PostGIS.
- Utiliser PgAdmin et son plugin d'import.
- Lisez attentivement les éventuels messages d'erreur !
Créez et éditez une nouvelle table de points.
- Créez la table vierge dans PostGIS, puis éditez la dans QGIS.
- Si besoin un fichier d'import d'une couche de points est disponible.
À partir du SQL que vous avez généré avec la caclculatrice de champs de QGIS, tentez quelques requêtes SQL dans PostGIS.
Requêtes, regroupement et jointure
À partir des données fournies, faites une symbologie sur le nombre de communes par départements. Plusieurs méthodes sont possibles, nous découperons ici chaque étape afin d'explorer le logiciel.
Dans un nouveau projet QGIS (Projet/Nouveau), ouvrez le shape des communes GeoFla et celui des départements d'Ile-de-France. Ajoutez la carte OpenStreetMap et vérifiez la bonne superposition des couches. N'oubliez pas l'option Activer la reprojection à la volée dans l'onglet Projet/Propriétés/SCR si besoin.
Requête attributaire
Tentez de sélectionnez les communes d'Ile-de-France via une simple sélection attributaire. Exportez la sélection en shape.
Requête de regroupement
Installez l'extension Group stats via le Gestionnaire d'extensions, l'icone apparaît disponible près de celui des requêtes spatiales.
Calculez le nombre de communes par département (faites glisser les champs et fonctions). Exportez les résultats en CSV.
Jointure
Explorez votre fichier CSV avec Excel ou OpenOffice, et nettoyez-le en vue d'une utilisation BDD. Ouvrez-le dans QGIS.
Joignez votre fichier du nombre de communes à votre shape des départements d'Ile-de-France (clic-droit sur la couche cible, Propriétés/Jointures). Faites une classification.
Tentez le coup sur PostGIS, en une seule requête SQL !
SQL spatial
Importer le shape IDF dans votre base PostGIS via PGAdmin et son plugin d'import, ou via le fichier SQL fourni
- UTF-8, colonne géométrique (non-géographique), SRID 27572.
- Vérifiez les SRID après import (astuces).
Importez le shape des communes GeoFLA dans POstGIS, puis calculer la surface des polygones sur QGIS, puis sur PostGIS
- Présentez vos résultats en km2.
- Arrondissez vos résultats.
- Créez un nouveau champ nommé surface et mettez-le à jour via une requête SQL.
Importez le fichier des arrêts RATP
- Colonne géométrique (non-géographique), SRID 4326.
- Superposez vos départements et vos arrêts de bus sur QGIS. Que constatez-vous ?
Requête imbriquée
Sur PostGIS, comptez le nombre d'arrêts de bus par départements franciliens.
Il s'agit d'une fonction d'intersection imbriquée avec une requête de regroupement, mais les SRID de vos tables (équivalent de la projection) sont différents ! Les arrêts de bus sont en 4326 et les départements en 27572.
- Vérifiez ou assignez vos SRID (fonction UpdateGeometrySRID).
- Reprojetez sur QGIS le SRID de l'IDF en 4326.
- Faites un test en superposant vos nouvelles couches et OpenStreetMap sous QGIS, vos couches doivent parfaitement se superposer, vérifiez quelques arrêts de bus manuellement.
- Créez dans PostGIS une table des arrêts d'un seul département (fonction st_intersects, dédoublonnez les résultats, n'oubliez pas que cette fonction attend un booléen, utilisez une clause).
- Créez une vue (view) calculant le nombre d'arrêts de bus par départements en une seule requête SQL.
Analyse et représentation de données
[Attention exercice déjà utilisé dans Introduction pratique au géomarketing, au SQL spatial et à l'isochronie, à modifier ici]
Nous allons calculer à partir de données brutes des statistiques synthétiques sur des participations à des salons professionnels. Il va s'agir de synthétiser de la données événementielle, occurentielle, et de la faire parler.
Le fichier export_commandes liste les commandes effectuées à ce salon. Certains identifiants de clients sont donc en doublons (plusieurs commandes), et certains montants à 0 euros (invités ou autres).
Le fichier export_soft stocke les information sur tous les clients de la société qui organise le salon, dont un grand nombre n’étaient pas présent au congrès.
1) Faires 3 requêtes de regroupement avec relation sur les deux tables :
- Requête ca_customers pour lister les clients présents, compter leur commandes et sommer leurs montants, ainsi que pour ramener les informations géographiques. Triez des plus grands montants au plus bas.
- Requête ca_country pour lister les pays d’origine des clients présents, compter les clients par pays et sommer les CA par pays. Triez des plus grands CA au plus bas.
- Une 3ème requête nommée ca_customers_fr pour lister les départements français des clients présents (faites une recherche sur l'expression extraction de chaîne par exemple), compter les clients par départements et sommer les CA par départements. Triez des plus grands montants au plus bas.
À chaque fois, renommez vos champs de regroupement directement dans les requêtes.
2) Exportez-en des fichiers .txt, puis ouvrez le fichier ca_country.txt sous QGIS. Liez-le avec le shape country et faîtes une thématique sur le CA par pays en cercles proportionnels (création de centroïdes). Jouez avec le Contrôle de l'ordre de rendu des entités.
3) À partir du shape des IRIS, créer un second shape des départements.
- Création d’un nouveau champ contenant le code département (extraction de chaîne) puis dissolution.
- Importez et liez votre fichier ca_customers_fr.txt à votre nouveau shape. Faîtes quelques thématiques sur le nombre de clients en surface de couleurs et en symboles proportionnels.
4) Sur PostGIS, importez votre shape des IRIS et votre fichier ca_customers_fr.txt, supprimez le champ stockant le code département des IRIS, puis créez une vue des IRIS dissous sur leur départements d'appartenance (à partir du champ du code postal donc) et les montant des CA par départements.
- Pour l'import du fichier ca_customers_fr.txt, créez d'abord une table vierge similaire dans PostGIS. Attention aux types de champs et aux options d'import disponibles.
- Tentez d'affichez vos résulats dans QGIS et/ou exportez vos résultats en shape.
5) Importez les fichiers export_soft et export_commandes dans votre base PostGIS, et tentez de réalisez l'intégralité des étapes du calcul/affichage des CA par départements avec leurs géométries, à partir du seul shape des IRIS et de ces 2 fichiers, en une seule requête SQL.
- Il s'agit en fait, pour les départements français, de cumuler les calculs des 3 premières étapes dans une seule requête SQL.