La méthode la plus commune pour interroger des données tabulaires est le langage SQL, très puissant pour effectuer des jointures entre plusieurs tables, des agrégation de données, calculs avancés...
Un SIG comme QGIS apporte des interfaces graphiques pour plus d’intuitivité qui font néanmoins appel à des sous-ensembles de la syntaxe SQL, notamment les expression booléennes (ayant pour résultat VRAI ou FAUX .
Par exemple :
Ces expressions sont appliquées à chaque entitée pour être évaluées à VRAI ou FAUX. On les exploite dans différents contextes :
Nous avons vu que le raster était une grille régulière de valeurs dans une projection donnée, uniformément réparties selon un pas régulier dans le repère euclidien de la projection.
La reprojection consiste à partir d’un raster dans une projection source, de produire un raster dans une autre projection. Cela impose une déformations et un ré-échantillonage car les points géographiques du raster ne sont pas les mêmes dans la projection source et de destination.
Il faut distinguer :
L’opération de géoréférencement consiste à produire un raster géographique à partir d’une image bitmap. Le Géoréférenceur de QGIS est un outil simple permettant d’ouvrir la carte PNG et poser des points avec leur correspondance en coordonnées géographiques. On peut évidemment cliquer sur la carte pour définir les coordonnées.
Ceci permet des déformations complexes qui seront abordées plus bas. Pour un géoréférencement linéaire, 2 points suffisent pour établir la position et l’échelle. Nous savons en outre que nulle rotation ne sera effectuée tant que le nord est bien le haut
de l’écran.
En sortie, le géoréférenceur produit un fichier GeoTIFF. Le GeoTIFF est une image TIFF qui contient les données de géoréférencement en tant que métadonnées, ce qui en fait le format de choix pour les rasters.
L’algorithme Helmert déformera l’image autant que nécessaire pour faire correspondre exactement les points de contrôle définis. C’est au départ ce qu’on cherche, mais cela donne beaucoup d’importance aux points (corollaire de la liberté offerte)
Les polynomiales de degrés 1, 2, 3 sont souvent plus efficaces car la déformation d’une photo obéit souvent à une ces équations mathématiques (polynome de degré 2 sinon 3).
Il faut souvent faire différents essais pour obtenir le meilleur géoréférencement possible. Les réflexes viennent ensuite.
Filtrer consiste à restreindre les entités. On a en sortie une donnée de structure identique à la donnée d’entrée qui est l’ensemble des entités en entrée qui valident la condition du filtre.
c’est-à-dire une valeur ayant pour valeur VRAI ou FAUX , pour l’entité respective pour laquelle elle est évaluée. Si la valeur est VRAI alors l’entité est inclue dans la donnée en sortie. Si c’est FAUX , elle en est exclue.
Filtrer ne change pas la cardinalité des données : une route reste une route, un point un point, etc. Les entités ne sont pas dédoublées.
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.
Au niveau métier, le tompon représente la propagation d’un phénomène dans un rayon donné, ou les zones de X mètres autours d’une surface donnée. C’est transformer le concept de distance (à quelque chose ) en surface.
Le tampon est la surface regroupant tout point situé à une distance inférieure donnée d’une géométrie initiale.
La zone tampon pour un point est un disque qui a pour rayon la distance du tampon : dans un rayon de 10 km autours de [...]
QGIS ne permet pas les courbes, seulement des segments droits pour les lignes et polygones. Un cercle est donc approché par un hexagone à N points. Lors de l’application d’un tampon, on peut préciser ce N .
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.
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.
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 .
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.
La fusion est l’opération permettant de juxtaposer plusieurs rasters pour produire un raster unique. Les rasters peuvent se superposer, auquel cas l’ordre de fusion est important : les derniers fichiers listés en entrée seront dessinés par dessus les premiers.
Les rasters en entrée doivent avoir le même nombre de bandes, sinon ce n’est pas logique. Par exemple, on ne peut fusionner un MNT avec une orthophoto : cela n’a pas de sens. Deux MNT uni-bande peuvent être fusionnés mais il appartient à l’humain de contrôler que les valeurs ont la même signification (les valeurs d’altitudes doivent être cohérentes entre eux en évitant par exemple de mélanger altitudes absolues et relatives, etc.).
Le découpage consiste à selectionner une région partielle du raster d’origine, comme on rogne une photo
. L’opération produit un raster de même résolution (densité géographique en mètres par pixel) mais de dimensions différentes.
Cela consiste à changer la résolution sans changer l’emprise géographique : les dimensions géographiques sont donc conservées mais pas les dimensions de la grille de pixels.
On l’effectue le plus souvent pour réduire la résolution : c’est l’équivalent de la généralisation des vecteurs. Le principe est le même que lorsqu’on réduit la résolution d’une photo pour diminer le poids du fichier.
Pour une réduction de facteur 2 , 4 pixels en entrée deviennent 1 pixel en sortie. Il s’agit bien d’une agrégation et la valeur du pixel en sortie est calculé à partir de la moyenne des pixels en entrée ou d’une autre méthode.
Souvent le facteur n’est pas entier donc les pixels en sortie tombent entre deux
pixels en entrée. Il existe plusieurs méthodes de calcul faisant intervenir le plus proche voisin
ou les N plus proches, etc. Les algorithmes vont du plus rapide (basse qualité) au plus lent (meilleure qualité), en particulier :
les pixels voisins, voisin des voisins et leur voisin. La qualité en est donc améliorée, au détriment du temps de calcul. Si le bilinéaire est se base sur un calcul polynomial de degré 1 , la méthode cubique suit une logique polynomiale de degré 3 . Pour approfondir : article Wikipédia .
La classification consiste à convertir les valeurs en classes. On remplace une valeur numérique par le numéro de la classe à laquelle elle appartient.
L’exemple le plus simple est la classification linéaire en N classes, d’après les valeurs minimales et maximales. Par exemple, pour faire 3 classes sur des valeurs comprises entre 0 et 300, on établit :
La classification n’est pas toujours linéaires. Elle peut se baser sur une répartition égale (autant de points dans chaque classe). Elle peut aussi suivre une autre logique.
Une des manières de formaliser cela est de définir une expression pour chaque classe : un pixel est classifié selon l’expression qui est évaluée à VRAI .
Examples d’application :
On peut regrouper les calculs rasters en 2 types :