Skip to Content

Répondre au commentaire

GRASS GIS pas à pas pour les débutants: 6 - les masques (MASK) et leurs utilisations, rapport avec les régions et l'algèbre des cartes

Niveau Débutant
Logiciels utilisés GRASS GIS
Quantum GIS
Plateforme Windows | Mac | Linux | FreeBSD

Nous avons vu dans GRASS GIS pas à pas pour les débutants: 3 - importer des couches matricielles (raster) et importance de la région l'importance de la région pour les traitements. Mais il y a encore mieux, beaucoup plus précis, les masques (MASK). L'explication sera abordée de la manière suivante:

  • région et MASK, différences
  • Comment créer un MASK ?
    • à partir d'une couche raster
    • à partir d'une couche vectorielle
  • Exemples de traitements:
    • découpage d'une couche raster
    • exemple de traitement avec un MASK: application de r.contour
    • effet sur l'importation d'une couche vectorielle, différence avec l'importation dans une région
    • suppression du MASK
    • avec l'utilisation de r.mapcalc
    • en pratique: rapport entre r.mask et r.mapcalc (ou comment r.mask est basé sur r.mapcalc)
    • avec les couches matricielles classées
  • Effets dans nviz
  • Sujets non abordés (r3.mask, masque dans les attributs d'une surface dans nviz)
  • Traitement dans QGIS avec l'extension grass
  • Conclusions

région et MASK, différences

Comme son nom l'indique, un MASK est une zone virtuellement masquée et, comme dans toutes les histoires, tout se passe sous le masque: lorsqu'il est créé, tous les traitements des couches matricielles (raster) se dérouleront exclusivement sous la zone masquée.

C'est donc une zone de traitement plus précise que la région, mais les deux ne sont pas nécessairement liées:

  • une région permet de définir l'emprise, la résolution, etc.  de la zone à traiter;
  • un masque est une couche virtuelle qui a comme valeurs 1 pour la zone masquée et 0 ou NULL pour ce qui est à l'extérieur. Seule la zone à l'intérieur sera donc traitée;
  • un masque ne s'occupe donc pas de la résolution des couches, fixée par la région;
  • toutes les couches de type raster situées sous le MASK seront affectées;
  • les couches vectorielles préexistantes ne sont pas concernées par le MASK;
  • mais les nouvelles couches vectorielles qui résultent d'un traitement sous MASK, oui;
  • ll n'est possible de créer qu'un seul MASK à la fois.

Comment créer un MASK

à partir d'une couche raster

Comme toujours dans GRASS GIS, il y a plusieurs manières d'effectuer un traitement:

  • par la commande r.mask:

r.mask

  • par la commande g.copy (copie d'une couche vers un MASK):

g.copy

  • dans la console de commandes (commande avec paramètres):

  • dans le Shell GRASS:

  • avec la commande r.mapcalc (GRASS GIS : introduction à l'algèbre des cartes (map algebra, r.mapcalc (et r3.mapcalc)) comme nous le verrons par après (voir en pratique: rapport entre r.mask et r.mapcalc (ou comment r.mask est basé sur r.mapcalc dans la suite):

résultat:

  • et le processus fournit donc la zone de traitement suivante:

à partir d'une couche vectorielle

Un MASK ne peut être créé qu'à partir d'une couche matricielle (seule alternative possible). Comment alors faire avec une couche vectorielle ?

  • une couche de type surface (aire + centroïde) est numérisée autour de la zone d'intérêt:

  • cette couche vectorielle est ensuite transformée de manière simple en couche raster (commande v.to.rast)

v.to.rast

  • et la procédure normale est ensuite appliquée:

  • J’ai ainsi réalisé une commande v.mask suivant les principes exposés dans GRASS GIS pour les experts: 1 - créer son propre module: r.in.rgb (importation directe d'un raster en couleur) en Python avec un menu pour le lancer: Elle combine v.to.rast + r.mask + g.remove pour supprimer éventuellement le raster intermédiaire créé.

Exemples de traitements

découpage d'un raster par la zone masquée

  • Du fait des caractéristiques déjà signalées, un MASK peut être utilisé pour découper très précisément un raster à l'aide de l'algèbre des cartes (voir GRASS GIS : introduction à l'algèbre des cartes (map algebra, r.mapcalc (et r3.mapcalc)):

  • et la nouvelle couche résultante:

exemple de traitement avec un MASK: application de r.contour

Puisque c'est un traitement,  il ne concernera donc que la zone masquée.

  • testons ici le résultat obtenu avec la commande r.contour qui fournira les contours sous forme d'une couche vectorielle:

effet sur l'importation d'une couche vectorielle, différence avec l'importation dans une région

  • À l'inverse d'une région où il est possible d'importer une couche vectorielle en la limitant à la surface de la région (découpage automatique lors de l'importation):

  • un MASK n'a aucune influence lors de l'importation.

suppression du MASK

Pour revenir à la normale, il suffit de le supprimer (il ne faut pas oublier qu'un MASK est présent pour un traitement et qu'il faut le supprimer par après sous peine de surprises...):

  • avec la commande r.mask

r.mask

  • ou avec la commande g.remove:

g.remove

  • après suppression, il est possible de constater que l'opération r.contour ne s'est bien effectuée que dans la zone masquée:

avec l'utilisation de r.mapcalc

  • la combinaison r.mapcalc + r.mask permet de faire pratiquement ce que l'on veut. Soit le MNT suivant d'où je voudrai extraire un nouveau MNT avec les valeurs comprises entre 200 et 250m d'altitude:

  • j'utilise donc r.mapcalc pour le faire en créant un nouveau raster avec pour valeurs 1 si le pixel est compris entre 200 et 250m d'altitude et null dans le cas contraire (couche rose)

  • je crée un masque à partir de cette couche et je l'applique:

  • j'utilise ce MASK pour obtenir mon nouveau MNT:

  • résultat avec le MASK:

  • résultat sans MASK

En pratique: rapport entre r.mask et r.mapcalc (ou comment r.mask est basé sur r.mapcalc)

  • r.mask est l'exemple d'une nouvelle commande créée à partir de r.mapcalc. C'est un script qui contient l'instruction (vers la ligne 130 du ficher r.mask dans le répertoire scripts de GRASS):

r.mapcalc "MASK=if(isnull($TEMPRAST),1,null())"

  • dans les premières versions de GRASS, le MASK devait être obtenu de cette manière;
  • dans le cas présent, le traitement aurait donc pu être fait directement avec r.mapcalc sans passer par un MASK:

avec les couches matricielles classées

  • Jusqu'à présent nous n'avons effectué qu'un masquage simple, mais il y a moyen d'aller beaucoup plus loin avec les couches classées (à partir des modules r.color, r.reclass ou r.mapcalc):

  • Cette couche est classée suivant les catégories suivantes (ce sont les formations cartographiées sur la carte géologique):

  • il est alors possible de créer un masque limité à une seule catégorie:

 

  • ou à plusieurs catégories:

  • Le résultat montre bien que les couches vectorielles préexistantes ne sont pas affectées par un MASK.

 Effets dans nviz

Quelle est l'influence de ce MASK (2D) dans nviz ?

  • la même qu'en 2D, seule la zone masquée est montrée:

avec masque                                                       sans masque

    avec masque et déplacement d'une des couches                         sans masque

Sujets non abordés

Nous n'aborderons pas ici, car trop complexe pour les débutants:

  • les masques sur les volumes: r3.mask;
  • les masques dans les attributs d'une surface dans nviz (il est préférable d'utiliser un MASK normal, méthode équivalente)

Traitement dans QGIS avec l'extension grass

C'est exactement le même traitement:

  • v.to.rast (vecteur -> raster)

  • r.mask

  • r.contour

  • Et le résultat où il est possible de remarquer que même avec un MASK, QGIS montre l'entièreté de la couche, contrairement à GRASS GIS:

Conclusions

J'espère vous avoir démontré que les régions et les masques sont les éléments fondamentaux dans la compréhension de GRASS GIS. Ils permettent de subdiviser la zone de traitement de multiples manières avec une grande précision. Il est vraiment indispensable de bien en comprendre les principes pour profiter pleinement de la puissance du logiciel.

Vous savez maintenant:

  1. démarrer le logiciel dans un secteur (location) et un jeu de données (mapset);
  2. importer des couches vectorielles et les afficher;
  3. importer des couches matricielles et les afficher (avec l'importance de la notion de région);
  4. géoréférencer une image;
  5. afficher les couches dans nviz (2.5D et 3D);
  6. utiliser les MASK pour traiter les données.

En route pour les traitements.

Tous les traitements ont été effectués sur Mac OS X avec GRASS GIS 6.4.1 ou  6.4.2  et Inkscape pour les figures.

Site officiel : GRASS GIS
Autres Liens : GRASS GIS pas à pas pour les débutants: 3 - importer des couches matricielles (raster) et importance de la région
Autres Liens : GRASS GIS pour les experts: 1 - créer son propre module: r.in.rgb (importation directe d'un raster en couleur) en Python avec un menu pour le lancer
Autres Liens : GRASS GIS : introduction à l'algèbre des cartes (map algebra, r.mapcalc (et r3.mapcalc))


Creative Commons License
licence Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique Commerciale 2.0 France

Répondre

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.