Programmation en C

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) :

html/

descriptions des modules

src/CMD/

scripts internes pour la compilation

src/include/

en-t�tes de fichier

src/libes/

routines des biblioth�ques de fonctions SIG

src/display/devices/

pilote d'affichage

src/fonts/

polices de caract�re

src/front.end/

routines internes pour le mode interactif de modules

Modules (arborescence standard):

src/display/

modules pour l'affichage de couches de donn�es dans le moniteur GRASS

src/general/

modules de gestion de fichier

src/imagery/

modules de traitement d'image

src/mapdev/

modules vecteurs

src/misc/

modules divers

src/paint/

pilote paint (PPM)

src/ps.map/

pilote postscript

src/raster/

modules raster

src/scripts/

scripts

src/sites/

modules sites

src/tcltkgrass/

Interface Graphique (GUI) Tcl/Tk

Autres modules:

src.contrib/

contributions de diverses institutions (bien que la majorit� d'entre elles soient aussi dans l'arborescence principale)

src.garden/

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)

Biblioth�que SIG :

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_]

Biblioth�que vectorielle :

gestion des objets vectoriels (surfaciques, lin�aires et sites)[Vect_, V2_, dig_]

Biblioth�que raster :

gestion de donn�es raster [R_]

Biblioth�que de donn�es sites :

gestion de donn�es sites [G_sites_]

Biblioth�que d'affichage :

sortie graphique du moniteur [D_]

Biblioth�que des pilotes :

pilote d'impression

Biblioth�que de donn�es images :

gestion de fonction de traitement d'image [I_]

Biblioth�que de segmentation :

gestion de donnn�es segment�es [segment_] [segment_]

Biblioth�que vask :

contr�le des touches de curseur etc [V_]

Biblioth�que rowio :

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.

Notes

[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.