Grass Tutorial | ||
---|---|---|
<<< Previous | Next >>> |
Les principaux aspects de la programmation en C sont abordés dans le manuel du programmeur GRASS 5.0 (PDF, 2.3MB). Cette section vous donnera juste un aperçu de la façon dont les modèles GRASS sont structurés. En général, il est bon de regarder quelques uns des 350 modules existants afin de d'apprendre (et de comprendre) comment ils fonctionnent (vous pouvez parcourir le code source par l'intémédiaire de notre interface CVS web). Seul un SIG en code ouvert tel que GRASS permet d'examiner ainsi les « entrailles » d'un SIG. La structure générale des modules esttoujours la même, chaque module est stocké dans un répertoire à l'intérieur du code source.
Le code source actuel est structuré de la façon suivante :[1]
Bibliothèque du SIG GRASS (fonctions les plus pertinentes uniquement) :
descriptions des modules
scripts internes pour la compilation
en-têtes de fichier
routines des bibliothèques de fonctions SIG
pilote d'affichage
polices de caractère
routines internes pour le mode interactif de modules
Modules (arborescence standard):
modules pour l'affichage de couches de données dans le moniteur GRASS
modules de gestion de fichier
modules de traitement d'image
modules vecteurs
modules divers
pilote paint (PPM)
pilote postscript
modules raster
scripts
modules sites
Interface Graphique (GUI) Tcl/Tk
Autres modules:
contributions de diverses institutions (bien que la majorité d'entre elles soient aussi dans l'arborescence principale)
modules liées à des modèles de simulation et à diverses interfaces
Les modules de GRASS existants sont construits à partir de la « bibliothèque de programmation GRASS » qui offre une multitude fonctions SIG. Elle est structurée comme suit (les crochets encadrent les traditionnels préfixes de noms de fonction pour chacune des routines considérée)
routines de base de données (gestion de fichiers GRASS), gestion de la mémoire, parser (analyse de chaînes), projection, etc.database routines (GRASS file management), memory management, parser (string analysis), projections, etc. [G_]
gestion des objets vectoriels (surfaciques, linéaires et sites)[Vect_, V2_, dig_]
gestion de données raster [R_]
gestion de données sites [G_sites_]
sortie graphique du moniteur [D_]
pilote d'impression
gestion de fonction de traitement d'image [I_]
gestion de donnnées segmentées [segment_] [segment_]
contrôle des touches de curseur etc [V_]
pour l'analyse parallèle des lignes d'une couche raster [rowio_]
Certaines des routines proposées sont très solides. Par exemple, elles permettent de calculer des distances géodésiques à partir de coordonnées données, d'autres permettent de faire des requètes sur des surfaces vectorielles (par exemple : est-ce qu'un point se trouve à l'intérieur d'un polygone?).
Les modules sont composés de programmes C (*.c), d'en-têtes de fichier (*.h) et d'un Gmakefile. GRASS possède sa propre routine « make » : gmake5. Le fichier Gmakefile contient des instructions à propos des fichiers à compiler et aux bibliothèques de fonctions à utiliser(bibliothèques GRASS et UNIX). Il a une composition spécifique qui doit être respectée. Un simple exemple (important : les indentations doivent être faites avec tabulation, et non avec espace!) vous montrera la structure typique. [2]
La ligne "\$(HOME)/\$(PGM)..." et la suivante contiennent les instructions du compilateur, au dessus de cette section on trouve les assignations de variables. Les variables qui ne sont pas fixées à cet endroit là sont paramétrées automatiquement dans
grass5/src/CMD/head/head.$ARCH
où $ARCH est le nom de l'architecture système. A partir de GRASS 5.0 cet en-tête de fichier est crée autometiquement en fonction de la plate-forme par le script "configure", qui doit être exécuté avant la première compilation. La variable $(HOME) indique où le fichier binaire (c'est-à-dire le module) sera copié : dans cet exemple, c'est le chemin standard pour les modules qui offre une interface en ligne de commande (sans limitation à la seule utilisation interactive) : grass5/etc/bin/cmd/. grass5/etc/bin/cmd/.
Le programme C lui-même doit être divisé en (sous-) fonctionnalités en différents fichiers qui doivent être listés respectivement comme liste d'objets dans le Gmakefile. Pour plus de détails veuillez vous référer au manuel du Programmeur GRASS étant donné que ce tutoriel ne peut contenir une introduction complète à la programmation en C. Les commandes de bibliothèques de fonctions GRASS peuvent être utilisées directement dans le code source. La récupération interactive de paramètres est possible grâce à la programmation de paramètres propre à GRASS. Voici un court exemple pour un module raster..
Le calcul se fait en fonction des lignes et des colonnes (voir la boucle « for »). Comme indiqué plus haut, il est vivement conseillé de diviser le module complet en fichiers distincts, organisés de façon thématique de façon à faciliter la maintenance du programme.
[1] | Cela changera dans les nouvelles versions de GRASS, avec plus de routines courantes dans les bibliothèques et l'intégration d'un tout nouveau moteur vectoriel (voir manuel du programmeur GRASS 5.7). |
[2] | L'exemple de ce code de ce chapitre appartient à M. Neteler, H. Mitasova, 2002. Open Source GIS: A GRASS GIS Approach. |
<<< Previous | Home | Next >>> |
Scripts sous GRASS | Up | Special Topics |