On les appelle champs , colonnes ou attributs selon qu’on parle respectivement de base relationnelle, de tableau ou de couche SIG. Comme dans un tableur, avec toutefois plus de contraintes, on peut ajouter ou supprimer des champs.
Un champ est défini avec un type de valeur : texte , nombre entier , nombre décimal , date ... Ce type est lié au stockage et à l’interprétation : on les manipule à travers les expression SQL de filtres, sélections, conditions de style...
L’opération de tampons a laissé de nombreux champs inutiles hérités de la donnée ROUTE500 . Ils n’ont plus de sens suite à la création de tampon où on a activé le regroupement.
Nous allons donc supprimer ces champs, plus de clarté lors des prochaines opérations.
Pour les besoins de la jointure à venir, nous avons besoin d’un identifiant. En fait, un identifiant existe physiquement mais n’apparaît pas. Il est utilisé par QGIS (fait partie du Shapefile) mais il est spécial .
L’expression $id
vaut la valeur de l’identifiant, nous pouvons ainsi créer ce nouvel attribut auto-calculé
.
L’intersection de 2 polygones est facile à imaginer : c’est le polygone délimitant la surface commune aux 2 polygones, qui peut être vide si les 2 polygones n’intersectent pas.
L’intersection entre une ligne et un polygone produit une poly-ligne, une ligne, un poly-point, un point ou pas de géométrie, suivant que la ligne intersecte le polygone sur une surface interrompue, une seule surface, en plusieurs point (polygone concave), un seul point (sur un sommet convexe).
... il faut donc se rappeler que ces abstractions mathématiques gouvernent le résultat qu’on obtient, car le SIG est contraignant en matière de types géométriques. Un multi-point n’est pas une poly-ligne, etc. Une couche de lignes ne peut pas contenir de point au sens strict, mais une ligne peut avoir un seul point : en quelque sorte elle est un point (en mathématiques), mais c’est une ligne (dans l’abstraction SIG).
Dans le SIG, l’identité principale n’est pas la géométrie mais l’entité : l’entité possède une ou plusieurs géométries.
L’explication précédente s’applique aux géométries. Mais comment sont traités les entités et champs de la table d’attributs ?
Ce qui se passe :
Ainsi la couche en sortie récupère tous les champs des 2 couches intersectées. C’est une méthode de jointure.
Comme on l’a vu précédemment dans la Gestion des champs , on peut créer de nouveaux champs, sans valeur initiale ou bien en donnant une valeur. Mieux qu’une valeur pour toutes les entités , on peut définir une expression SQL .
Cette opération consiste à ajouter des attributs (des colonnes) dont la valeur pour chaque entité est le fruit d’une expression algébrique.
Le type de son résultat est libre : nombre entier, nombre décimal, texte, date, booléen... Il est déterminé par l’expression. L’expression peut exploiter la valeur d’attributs existants et c’est son principal intérêt.
Nous allons calculer l’aire sous forme de nouvelle colonne à la donnée de la couche ilots.intersection , pour chaque surface d’expropriation (les intersections).
La jointure consiste à fusionner une donnée vecteur avec une autre table attributaire, éventuellement non-spatiale (purement attributaire).
Pour cela, on va pour chaque entitée apparier
une entité (une ligne
de la seconde donnée. On dit aussi apparier les entités de la donnée à gauche avec la donnée à droite
. En d’autres termes, faire correspondre à chaque entité de gauche une entitée de droite, quand c’est possible.
La correspondance se fait généralement sur un identifiant commun. Par exemple, notre donnée routes peut être enrichie des attributs présents dans la donnée de l’exploitant, au format CSV, en se basant sur un identifiant commun pour établir la correspondance.
La jointure est en fait bien plus générale quand elle se définit par une expression algébrique reposant sur les attributs de l’entité à gauche et à droite. L’expression peut exploiter le spatial, lorsqu’il s’agit par exemple d’apparier à une liste de points les attributs de sa communes respective : sans attribut id_commune , la fonction Within(point.geometry, commune.geometry) fera correspondre à chaque point la commune dans laquelle il se trouve géométriquement.
La cardinalité n’est pas conservée : l’entité à gauche peut être multipliée (doublée, triplée...) si elle vérifie la correspondance pour plusieurs entités à droite. Dans le cas où elle n’a aucune correspondance, elle peut selon le type de jointure être élminiée (multipliée par zéro correspondance) ou bien conservée avec des valeurs NULL pour les attributs n’ayant pas de correspondance. Dans le premier cas c’est une jointure symétrique et dans l’autre une jointure asymétrique à gauche .
Notre objectif est d’afficher en étiquettes sur la carte des informations pour chaque îlot, y compris relatives à la surface d’expropriation. Il nous faut ramener l’attribut d’aire à l’îlot global (ilots , non pas ilots.intersection ).
C’est exactement ce que permet la jointure : apparier une couche cible dans une couche source en y intégrant virtuellement ses champs. Ici, la jointure est évidente du fait que ilots.intersection découle directement de ilots , contrairement à des cas métiers fréquents où il faut concevoir le sens de la jointure à faire.
Agréger une donnée se fait par groupe : la liste des entités en entrée est transformée en une autre liste où chaque entité représente un groupe. Le groupement se faire par valeur unique : d’un attribut ou plus généralement d’une expression.
Par exemple, on peut grouper les communes par département, un exploitant la valeur de l’attribut code_dept .
Pour chaque groupement, on peut faire remonter
d’autres valeurs à condition qu’elles soient agrégées. Par exemple, pour notre agrégation departements
, on peut générer un attribut nb_communes
qui a pour valeur l’expression count(id_commune)
, soit le nombre de id_commune
existant dans le groupe respectif.
Il s’agit de diminuer le nombre de points d’un vecteur tout en préservant au mieux sa topologie. C’est indispensable pour réduire l’échelle de la représentation : pas seulement pour économiser en poids des données mais pour que la représentation soit convenable.
Par exemple, le tracé d’une route détaillé à 10 mètres (un point tous les 10 mètres) doit être généralisé pour être affiché sur une échelle de 1/100 000
. Autrement, les points sont trop denses et posent problème lors du rendu des tracés (peut former des pâtés
).
C’est l’équivalent vecteur du sous-rééchantillonage de rasters (rééchantillonage avec réduction du nombre de pixels), qui est plus facile à concevoir du fait de la nature régulière de la grille d’un raster. Pour les vecteurs, la généralisation est complexe car même s’il y a perte d’information (moins de points à l’arrivée qu’au départ), il y a aussi de la détection afin de préserver les formes.
C’est un sujet mathématique complexe où les recherches se poursuivent.
On dit symbolique
car c’est la nature même du vecteur : en tant que géométrie purement numérique, on définit un tracé qui n’est pas l’entité désignée de la réalité : c’est un dessin.
Dans le SIG, symboles veut dire symbologie : manière de représenter la géométrie. Chacun des 3 types a ses types de symboles :
En effet, une ligne peut rester ligne ou devenir un succession de points. Elle a une épaisseur et peut donc devenir un polygone, lui-même rempli par motif de ligne ou de points...
De plus, chaque symbologie est une pile de symboles : par exemple, la ligne de terre-plein d’une route à double-sens est une ligne simple (en noir ou pointillé) par dessus une ligne rouge épaisse et derrière une autre ligne, noire, un peu plus épaisse pour représenter la bordure.
On a donc affaire à un arbre de symboles. La symbologie est une véritable science et le moteur de la qualité cartographique : réaliser un beau graphisme avec une sémantique riche.
La suite du TP propose des propriétés de style précises afin de guider, mais qui n’est pas restrictif. Le style est personnel.
La méthode est évidente pour qui a déjà manipulé un logiciel vectoriel sous une forme ou une autre. Par exemple, un traitement de texte ou tableau quand on définit un style de remplissage pour un paragraphe de texte, une cellule de tableau, etc.
En remplissage , on a le fond uni ou différents motifs prédéfinis, avec une couleur définie
En bordure , on a une épaisseur, une couleur et un style de ligne : continu, pointillé, etc.
Jusqu’ici, il s’agissait de symbole unique . La méthode se généralise avec l’usage de règles conditionnelles . 4 méthodes :
Pour les styles catégorisé et gradué , il faut définir un symbole pour chaque classe. Mais QGIS les génère automatiquement à partir du symbole de base donné et selon la classification définie.
Pour ne pas perturber la symbologie en hâché des îlots, on va dupliquer la couche pour la mettre dessous la première et peindre le remplissage selon le style gradé.
Il y a 3 niveaux de transparence :
Dans le cas simple d’un symbole unique à remplissage simple, les niveaux couche et symbole sont équivalents : on peut agir sur l’un ou sur l’autre avec le même effet, mais la bordure est affectée comme le remplissage.
Pour un remplissage semi-transparent avec bordure opaque, il faut donc agir sur la couleur : c’est la couleur elle-même qui devient semi-transparente.
Après chaque action, on peut cliquer sur Appliquer pour observer l’effet sans fermer la fenêtre :
Pour toute couche vecteur ou raster, dans Propriétés- → Général , on peut activer la Visibilité dépendante de l’échelle et indiquer une plage d’échelle en dehors de laquelle la couche devient invisible.
C’est utile pour faire apparaître des détails à grande échelle (grand zoom) qui sinon polluent la carte à plus petite échelle.
On n’hésite pas à dupliquer des couches pour différencier le style selon l’échelle : jusqu’à une certaine échelle, la première couche s’affiche avec un style peu encombrant, et au delà elle laisse place à son clone dont le style est plus imposant (davantage d’espace sur la carte).
On ne le manipulera pas ici, mais il faut savoir que pratiquement toute propriété graphique (couleur, épaisseur, îcone, image de remplissage...) dans n’importe quel symbole de l’arbe peut être dynamique : la valeur provient de la valeur d’une ou plusieurs attributs, avec toute la puissance des expression SQL.
À partir de là, on peut personnaliser le style en fonction de la donnée, mais aussi la donnée en fonction du style : on définit de nouveaux attributs pour indiquer des couleurs, des tailles d’îcones...
Le composeur d’impression de QGIS permet de mettre en page un ou plusieurs extraits de carte, comme si on enregistrait la carte comme image pour l’inclure dans une présentation en document.
Les principaux avantages sont :
Pour l’instant, le composeur est statique , un génère une carte à la fois. On doit paramétrer l’atlas afin de générer un document spécifique à chaque parcelle.
Il faut à présent paramétrer la carte par rapport à l’atlas pour qu’elle soit spécifique à chaque îlot :
Pour finir, nous ajoutons l’identifiant de la parcelle et les informations quantitatives sous forme d’étiquettes dynamiques :
Nous ajoutons à présent 3 nouvelles étiquettes pour indiquer la pente minimale, maximale et moyenne, à côté de la carte :
Pour comprendre ces expressions :
Enfin, générer l’atlas PDF définitif dans le fichier td/impression/atlas.pdf