HAL Id: hal-02592902
https://hal.inrae.fr/hal-02592902
Submitted on 15 May 2020
HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-entific research documents, whether they are pub-lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.
L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.
Adaptation, développement et évaluation d’un système
d’information destiné à administrer les données
provenant d’un réseau de capteurs hydrologiques
communiquant
R. Yuan
To cite this version:
R. Yuan. Adaptation, développement et évaluation d’un système d’information destiné à
admin-istrer les données provenant d’un réseau de capteurs hydrologiques communiquant. Sciences de
UNIVERSITE BLAISE PASCAL CEMAGREF UFR SCIENCES ET TECHNOLOGIES 24 AVENUE DES LANDAIS DEPARTEMENT DE MATHEMATIQUES ET D'INFORMATIQUE BP 50085
63177 AUBIERE CEDEX 63172 AUBIERE CEDEX
Master 2 Professionnel mention Informatique et Systèmes
RAPPORT DE STAGE
Adaptation, développement et évaluation d’un système
d’information destiné à administrer les données provenant d’un
réseau de capteurs hydrologiques communiquant
Présenté par : Rui YUAN
Tuteurs : Gil DE SOUSA Benoit SARRAZIN
Date : du 6 Avril au 30 Septembre 2009
CemOA
: archive
ouverte
d'Irstea
REMERCIEMENTS
Durant mon stage, j'ai bénéficié du soutient moral et technique de plusieurs personnes ce qui a rendu mon environnement de travail très agréable.
Je remercie tout d'abord Monsieur Gil DE SOUSA pour m’avoir permis de réaliser ce stage, et pour m’avoir guidé et encadré au cours de celui-ci dans de très bonnes conditions et dans une ambiance de travail très agréable.
Je remercie également Monsieur Benoit SARRAZIN pour l'intérêt qu'il a accordé à la progression de mon travail.
Enfin, je tiens à remercier l'ensemble des membres des différentes équipes de l'unité de recherche TSCF pour m'avoir aussi bien accueillie et aidée.
CemOA
: archive
ouverte
d'Irstea
RESUME
Mon stage de fin d'étude s'inscrit dans le cadre d'un projet de recherche portant sur la thématique de l'hydrologie. L'objectif de ce stage a consisté à l'adaptation, au développement et à l'évaluation d'un système d'information destiné à administrer les données provenant d'un réseau de capteurs hydrologiques.
La première partie de ce stage a été dédiée à l'étude de la base de données B.I.C.H.E. (Biologie Chimie Hydrologie pour une base Ecologique) du Cemagref. La seconde partie concerne les modifications de cette base pour permettre l'intégration des relevés issus de sondes limnimétriques et de pluviomètres. Enfin, la dernière partie fut consacrée aux développements de modules pour la manipulation et la gestion des données issues de ces relevés.
La base de données B.I.C.H.E. a été conçue grâce aux systèmes de gestion de bases de données (SGBD) PostgreSQL. Son interface ainsi que les modules complémentaires que nous lui avons ajoutés ont été réalisés en langage PHP.
Mot clés: hydrologie, B.I.C.H.E., PostgreSQL.
ABSTRACT
Within the framework of my training period, I had to work in a research project which topic deals with hydrology. The main objective was the adaptation, the development and the evaluation of an information system dedicated to management of hydrological data collected using a wireless sensor network.
The first part of this training period was dedicated to the study of a Cemagref database called 'B.I.C.H.E.'. The second part concerned modifications on this database in order to enable the importation of records from water level and rain gauge sensors. The final part was devoted to the development of modules for handling and managing the data.
The database B.I.C.H.E. has been designed using the database management system (DBMS) PostgreSQL. Its first version interface and the new functionalities that we have added have been developed in PHP language.
Key words: hydrology, B.I.C.H.E., PostgreSQL.
CemOA
: archive
ouverte
d'Irstea
TABLE DES MATIERES
REMERCIEMENTS ...- 2 -
RESUME...- 3 -
ABSTRACT ...- 3 -
TABLE DES MATIERES ...- 4 -
LISTE DES FIGURES...- 5 -
GLOSSAIRE ...- 6 -
INTRODUCTION...- 7 -
PARTIE I : CONTEXTE ...- 8 -
1. Le Cemagref ...- 9 -
1.1 Présentation général ...- 9 -
1.2 Les départements scientifiques...- 9 -
1.3 Le Cemagref en chiffre ...- 10 -
1.4 Les centres régionaux...- 10 -
1.4.1 Présentation ...- 10 -
1.4.2 Le Cemagref en région Auvergne-Limousin ...- 11 -
2. Présentation globale de l'application ...- 11 -
2.1 Rappel de l'étude ...- 11 -
2.2 Réseau de capteurs sans fil...- 12 -
2.3 Description du dispositif actuel...- 12 -
2.4 Description des données enregistrées...- 13 -
2.5 Archivage et consultation des données ...- 14 -
2.5.1 La base de données B.I.C.H.E du Cemagref ...- 14 -
2.5.2 Les besoins spécifiques liés au réseau de capteurs capacitifs ...- 14 -
2.5.3 Acquisition des données...- 15 -
2.5.4 Consultation et extraction des données ...- 15 -
3. Mon travail de stage ...- 16 -
PARTIE II : Présentation des outils et de la base de données B.I.C.H.E...- 17 -
1. Présentation des outils ...- 18 -
1.1 L'environnement PostgreSQL ...- 18 -
1.2 Présentation du langage PHP ...- 19 -
2. La base de données B.I.C.H.E. du Cemagref ...- 20 -
2.1 L'architecture ...- 20 -
2.2 Vue d'environnement Web ...- 21 -
2.3 Vue de la base de données présente sous PostgreSQL...- 22 -
PARTIE III : Evolution de la base de données B.I.C.H.E ...- 25 -
1. Introduction ...- 26 -
2. Importation des chroniques de mesure...- 26 -
3. Affichage des mesures ...- 27 -
4. Affichage graphique pour un intervalle sélectionné...- 29 -
4.1 Affichage des mesures graphiquement ...- 29 -
4.2 Affichage des mesures directement...- 31 -
5. Comparaison de deux stations...- 32 -
CONCLUSION ...- 36 - REFERENCES BIBLIOGRAPHIQUES ...- 37 - WEBOGRAPHIES...- 37 - ANNEXES ...- 38 - CemOA : archive ouverte d'Irstea / Cemagref
LISTE DES FIGURES
Figure 1 : Répartition des compétences ...- 10 -
Figure 2 : 9 capteurs capacitifs répartis sur le réseau hydrographique du Mercier...- 12 -
Figure 3 : Exemple de fichier de sortie du capteur limnimétrique capacitif ...- 13 -
Figure 4 : Enregistrements limnimétriques sur 7 stations de l’épisode pluvieux du 20 juin 2007 sur le bassin versant du Mercier ...- 15 -
Figure 5 : Fonctionnement du langage PHP...- 19 -
Figure 6 : L'architecture de la base B.I.C.H.E...- 20 -
Figure 7 : Vue d'environnement Web ...- 21 -
Figure 8 : Vue de la base de données présente sous PostgreSQL ...- 22 -
Figure 9 : Requête SQL pour la table de station ...- 23 -
Figure 10 : Les changements sous l’environnement PostgreSQL...- 24 -
Figure 11 : Evolutions des fichiers de chroniques ...- 26 -
Figure 12 : Le format du fichier importation ...- 26 -
Figure 13 : Vue de la page "Changer le format de fichier brut" ...- 27 -
Figure 14 : Liste des stations ayant des chroniques de mesure ...- 28 -
Figure 15 : Liste des chroniques ...- 28 -
Figure 16 : Consultation journalière de la station MercierExu ...- 29 -
Figure 17 : Sélection un intervalle pour une station...- 30 -
Figure 18 : Graphe des mesures dans un intervalle pour une station ...- 30 -
Figure 19 : Tableau des données dans un intervalle sélectionné...- 31 -
Figure 20 : Le fichier d'exportation...- 32 -
Figure 21 : Chroniques de mesure hydrologiques des stations ancienne version ...- 33 -
Figure 22 : Chroniques de mesure hydrologiques des stations ...- 34 -
Figure 23 : Comparaison graphique entre les stations ...- 35 -
CemOA
: archive
ouverte
d'Irstea
GLOSSAIRE
Hydrologie : L’hydrologie est la science de la terre qui s’intéresse au cycle de l’eau, c’est-à-dire aux échanges entre l’atmosphère, la surface terrestre et son sous-sol. [W1]
Limnimètre : Un limnimètre ou station limnimétrique est un équipement permettant l’enregistrement et la transmission de la mesure de la hauteur d’eau (en un point donné) dans un cours d’eau. Cette mesure de hauteur peut être transformée en estimation du débit de la rivière à l’aide d’une courbe de tarage. [W1]
Pluviomètre : Le pluviomètre est un instrument météorologique destiné à mesurer la quantité de précipitation (pluie) tombée pendant un intervalle de temps donné. [W1]
Système de gestion de bases de données : Un système de gestion de base de données (SGBD) est un ensemble de logiciels qui sert à la manipulation des bases de données. Il sert à effectuer des opérations ordinaires telles que consulter, modifier, construire, organiser, transformer, copier, sauvegarder ou restaurer des bases de données. [W1]
CemOA
: archive
ouverte
d'Irstea
INTRODUCTION
Dans le cadre de mon stage de fin d'études de Master 2 Informatique et Système, à l'UFR Sciences et Technologie de l'Université Blaise Pascal, Clermont II, j'ai effectué un stage au Cemagref de Clermont-Ferrand, au sein de l'unité de recherche TSCF (Technologies et systèmes d'information pour les agrosystèmes). Ce stage s'intègre dans un projet de recherche en partenariat entre le Cemagref de Lyon et le Cemagref de Clermont-Ferrand.
Le Cemagref est un institut de recherche finalisée de référence pour la gestion durable des eaux et des territoires. La gestion durable est un élément constitutif de la diversité biologique d'une manière conforme aux principes de développement durable. L'organisme Cemagref centre une partie de ses recherches dans le domaine des transferts hydrologiques de surface, qui représente un phénomène physique essentiel du cycle de l'eau, chose qui fait l'objet du développement d'un outil de supervision des différents équipements réseaux.
Mon stage s'inscrit dans la continuité de travaux réalisés précédemment sur la conception, la réalisation et l'évaluation d'un système d'information destiné à administrer les données provenant d'un réseau de capteurs hydrologiques sans fil communiquant.
Dans une première partie, je rappelle le contexte. Je présente ensuite les différents langages et outils utilisés : PostgreSQL, PHP et la base de données B.I.C.H.E. Dans la dernière partie, je présente les extensions que j'ai apportées à la base de données B.I.C.H.E et à l'interface Web de celle-ci. CemOA : archive ouverte d'Irstea / Cemagref
PARTIE I :
CONTEXTE
CemOA : archive ouverte d'Irstea / Cemagref1. Le Cemagref
1.1 Présentation général
Le Cemagref, « l'institut de recherche finalisée de référence pour la gestion durable des eaux et des territoires » est un organisme public à caractère scientifique et technologique. Il a été créé en 1981 et a acquis le statut d'établissement public à caractère scientifique et technologique (EPST) en 1986.
Le Cemagref a pour mission de répondre à des questions concrètes de société dans le domaine de la gestion durable des eaux et des territoires en produisant des connaissances nouvelles et des innovations techniques utiles aux gestionnaires, aux décideurs et aux entreprises.
Ses thèmes de recherche sont centrés sur les ressources en eau de surface, les systèmes écologiques aquatiques et terrestres, les espaces à dominante rurale, les technologies pour l’eau, les agro-systèmes et la sûreté des aliments.
1.2 Les départements scientifiques
Le Cemagref comporte actuellement 5 départements scientifiques : o Ressources en eau, usages et risques
o Milieux aquatiques, qualité et rejets o Gestion des territoires
o Ecotechnologies et agrosystèmes
o Méthodes pour la recherche sur les systèmes environnementaux
Une restructuration en cours aura pour conséquence le passage de 5 à 3 départements qui seront les suivants :
o Eaux o Territoires o Ecotechnologies
Chaque département a des unités de recherche. Actuellement, le Cemagref compte 21 unités de recherche propres (UR), 6 unités mixtes de recherche (UMR) et une équipe de recherche technologique (ERT). Chaque unité de recherche est placée sous la responsabilité fonctionnelle de l’un des chefs de département ou de la direction scientifique, et sous la responsabilité hiérarchique du directeur régional du lieu d’implantation. Les unités sont des lieux de gestion des compétences et des pôles relationnels locaux. Chacune des UR est constituée d’équipes bien identifiées, chaque équipe assurant la mise en œuvre totale ou partielle d’un thème de recherche.
CemOA
: archive
ouverte
d'Irstea
1.3 Le Cemagref en chiffre
Le budget annuel du Cemagref en 2007 est de 88,9 millions d'euros. Les recettes provenant des contrats s’élèvent à 18,2 millions d'euros et assurent l'essentiel des moyens de fonctionnement des unités de recherche.
Le Cemagref emploie environ 1 350 personnes dont 950 permanents pour moitié chercheurs et ingénieurs, répartis en 28 unités de recherche sur 9 sites principaux.
Il accueille en outre plus de 200 doctorants, 40 post-doctorants et chercheurs étrangers, ainsi qu’environ 250 stagiaires de niveau master.
L'effectif des ingénieurs et des chercheurs se répartit équitablement selon les grandes orientations scientifiques, comme le montre la figure suivante :
Figure 1 : Répartition des compétences
(Source: http://www.cemagref.fr/le-cemagref/linstitut/son-identite-ses-missions/le-cemagref-en-chiffre/)
1.4 Les centres régionaux
1.4.1 Présentation
Le Cemagref dispose de 9 centres ou groupement situés en métropole : o Aix-en-Provence o Antony o Bordeaux o Clermont-Ferrand o Grenoble o Lyon o Montpellier o Nogent-sur-Vernisson o Rennes
Il possède également une Antenne régionale à la Martinique.
CemOA
: archive
ouverte
d'Irstea
1.4.2 Le Cemagref en région Auvergne-Limousin
Le Cemagref mène en Auvergne des recherches autour de deux axes :
o Innovations technologiques pour l'agriculture raisonnée et pour l'environnement. o Collaboration avec les acteurs du développement régional et de l'aménagement du
territoire dans le devenir des territoires ruraux, avec le développement d'outils et de méthodes d'aide à la décision, la réalisation d'essais, et l'apport de son expertise dans les domaines de l'agriculture et de l'environnement.
Le centre de Clermont-Ferrand est implanté sur deux sites : site d’Aubière et site de Montoldre. Il est constitué de 3 unités de recherche, qui ont la particularité d'appartenir à des départements scientifiques différents :
o TSCF: Technologies et systèmes d'information pour les agrosystèmes.-UR
o METAFORT: Mutations des activités, des espaces et des formes d'organisation dans les territoires ruraux.-UMR
o LISC: Laboratoire d'Ingénierie des Système Complexes.-UR
Je travaille dans l'unité TSCF. Je suis dans une des 4 équipes de TSCF qui s'appelle COPAIN (Systèmes d'Information Agri-Environnementaux Communicants). L'activité de l'équipe est consacrée aux méthodes d'ingénierie des systèmes d'information spatialisés dédiés à la gestion agri-environnementale.
Ce stage s'intègre dans un projet de recherche dont une présentation est fournie dans ce qui suit.
2. Présentation globale de l'application
2.1 Rappel de l'étude
L’hydrologie de surface est la branche de l’hydrologie qui étudie le ruissellement, les phénomènes d’érosion par l’eau, les écoulements des cours d’eau et les inondations. Le projet de recherche dans lequel mon stage s'intègre porte sur cette thématique. Le mécanisme de surveillance déployé sur un bassin versant a pour objectif de fournir des rapports et des comptes rendus détaillés concernant le fonctionnement hydrologique de surface. L'intérêt de l'utilisation d'un tel réseau de mesure est de présenter la dynamique spatiale et temporelle des événements hydrologiques. [R1, R2]
On utilise une base de données pour gérer les données collectées. Le système d'information que nous devons concevoir est alimenté en données par un réseau de capteurs sans fil dont le but est de mesurer le niveau d'eau dans un bassin versant.
Au cours du projet, le nombre de capteurs sans fil n'a cessé d'augmenter. De plus, la fréquence d'acquisition des données est passée de toutes les 3 minutes à toutes les 2 minutes. Ainsi, l'application qui sera réalisée devra prendre en compte ces futures évolutions. L'objectif final est l'acquisition des données par les capteurs sans fil et leur mise à disposition des utilisateurs.
CemOA
: archive
ouverte
d'Irstea
2.2 Réseau de capteurs sans fil
Un réseau de capteurs est un ensemble de capteurs sans fil regroupés au sein d'un même réseau. Les capteurs sans fil communiquent généralement en mode Ad Hoc. Le mode Ad Hoc est un mode opératoire d’un réseau sans fil Wifi. Les clients de mode Ad Hoc sont connectés les uns aux autres sans aucun point d’accès.
Les principaux éléments matériel (ou composants matériels) du capteur sans fil sont: o Unité de calcul
o Gestionnaire d'alimentations o Module de communication sans fil
o Dispositif de mesure de la grandeur observée
Notre réseau est constitué d'un certain nombre de capteurs sans fil équipés de différents capteurs de grandeur physiques de type pluviomètres ou sondes limnimétriques, à partir desquels on mesure les variations du niveau de l'eau. Ces capteurs sans fils récoltent les informations, et les transmettent par la suite à une station de traitement de manière autonome.
2.3 Description du dispositif actuel
Le dispositif actuel est constitué de neuf capteurs (bientôt 13 capteurs) limnimétriques distribués sur le réseau hydrologique du Mercier (Figure 2).
L'acquisition des données s'effectue à pas constant selon une périodicité (2 minutes), et est la même pour l'ensemble des capteurs du réseau. Cela représente tous les mois plusieurs centaines de milliers de données à collecter, à traiter, à stocker et à mettre à disposition des chercheurs.
Figure 2 : 9 capteurs capacitifs répartis sur le réseau hydrographique du Mercier
CemOA
: archive
ouverte
d'Irstea
2.4 Description des données enregistrées
Les données enregistrées sont les suivantes :o Date de début d'acquisition en Jour Mois Année Heure Minute o Fréquence mesurée en Hertz à chaque pas de temps
o Hauteur correspondante en cm à chaque pas de temps
Ces hauteurs sont calculées via l'étalonnage du capteur de grandeur physique qui fixe la loi linéaire de transformation de la fréquence en hauteur.
En sortie du capteur ces données sont extraites dans un fichier ".dat"(figure 3).
Les autres données intéressantes à archiver sont les données de pluviométrie. Il existe actuellement 2 pluviomètres sur le site d'étude, un troisième sera prochainement ajouté.
Figure 3 : Exemple de fichier de sortie du capteur limnimétrique capacitif
CemOA
: archive
ouverte
d'Irstea
L'application actuelle fonctionne de la manière suivante :
o Passage d'une personne pour récolter l'ensemble des données
o Gestion « locale » (un seul ordinateur) des données dans une base réduite La nouvelle application comportera les avancées suivantes :
o Acquisition des données automatique par les capteurs de grandeur physique
o Ajout de fonctionnalités pour améliorer la manipulation, la gestion et le stockage des données collectées dans le serveur
Le travail réalisé durant ce stage porte sur la partie amélioration et gestion des données collectées dans le serveur.
L'ensemble des données n'est pas centralisé. Alors il faut utiliser des réseaux de capteurs pour remédier à ce problème. Pour la manipulation et la gestion des données, on utilise le concept d'un système d'information adapté s'appuyant sur la base de données B.I.C.H.E. du Cemagref.
2.5 Archivage et consultation des données
2.5.1 La base de données B.I.C.H.E du Cemagref
La base B.I.C.H.E a été crée pour entreposer des données de différentes natures du Cemagref : hydrométrie, hydrobiologie…
Les données hydrométriques sont archivées par année et consultables par mois. Il s'agit des données de pluviométrie et de hauteur d'eau à relier à des courbes de tarage pour obtenir des débits.
Cette base a été conçue pour stocker les données sans adaptation particulière pour les utilisateurs. La manière dont les stations sont référencées est assez complexe et pas totalement adaptée à l'application souhaitée.
Dans la partie II de mon rapport, je présenterai plus en détails la base B.I.C.H.E.
2.5.2 Les besoins spécifiques liés au réseau de capteurs capacitifs
Toutes l'information provenant des différentes stations d'observation doit être accessible et consultable simultanément.
Les périodes intéressantes correspondent essentiellement aux épisodes pluvieux enregistrés par les pluviomètres. Il serait donc intéressant dans la procédure de consultation des données du réseau limnimètrique de consulter en premier les données pluviométriques. Il existe des algorithmes qui permettent de filtrer les périodes intéressantes qui présentent des pics de précipitations. CemOA : archive ouverte d'Irstea / Cemagref
Une fois ces périodes intéressantes fixées, il faudrait extraire simultanément les graphes de l’ensemble des stations pour lesquelles des données sont disponibles (Fig. 4).
Figure 4 : Enregistrements limnimétriques sur 7 stations de l’épisode pluvieux du 20 juin 2007 sur le bassin versant du Mercier
2.5.3 Acquisition des données
L’acquisition de données respecte les principes suivants :
o Les données collectées seront extraites des chroniques de mesure sur chaque capteur par un opérateur de terrain (cette étape sera automatisée dans le cadre du système de réseau communicant accessible à distance).
o L'utilisateur va valider les données et les charger dans la base de données B.I.C.H.E, avec une synchronisation des données issues des différents capteurs.
2.5.4 Consultation et extraction des données
CemOA
: archive
ouverte
d'Irstea
La consultation nécessite :
o Sélection des périodes correspondantes à des épisodes pluvieux, soit de façon manuelle en balayant les données pluviomètres puis en saisissant une période soit automatique en filtrant les épisodes.
o Visualisation sur les périodes ciblées des données limnimétriques de l’ensemble des capteurs disponibles.
o Exportation dans un tableau de synthèse de l’ensemble des données des capteurs sous forme synchronisée. Les fréquences pourront être fournies à la demande en plus des hauteurs d’eau.
D’un point de vue pratique il faut pouvoir identifier chaque station par son nom et chaque capteur par son numéro. Un capteur peut très bien changer de station. Il faut prévoir également l’ajout de nouvelles stations par les utilisateurs. La particularité du dispositif est qu’il s’agit de capteurs légers facilement déplaçables.
A ce niveau, il faudrait pouvoir associer une coordonnée géographique à chaque station d’observation et l’idéal serait de développer une interface cartographique pour consulter les données avec l'outil PostGis. Dans ce cas, la consultation pourrait être guidée par la carte en sélectionnant les capteurs pluviométriques puis limnimétriques.
3. Mon travail de stage
Mon travail porte sur la partie d'un système d'information destiné à administrer les données provenant d'un réseau de capteurs hydrologiques communicant.
Dans un premier temps, j'ai étudié la base BICHE qui a été créée pour entreposer les données de différentes natures fournies par des équipes du Cemagref. Le système de gestion de bases de données utilisé pour héberger cette base est le logiciel PostgreSQL. L’accès à la base est obtenu à l’aide d’une interface Web dédiée qui permet, entre autres, à l’aide de pages en langage PHP, d’accéder à des chroniques provenant de stations de mesure situées dans différents bassins versants.
J’ai ensuite apporté différentes modifications à cette base pour améliorer l’intégration des relevés issus de sondes limnimétriques et de pluviomètres. Une refonte complète du module dédié à l’importation des données brutes a été réalisée afin d’en faciliter l’utilisation. Cela correspond à une première étape pour rendre la base BICHE mieux adaptée à la réception de données provenant d’un réseau de capteurs hydrologiques. Des travaux sont également en cours pour que l’application finale soit capable de recevoir et de gérer des données provenant d’un nombre de plus en plus important de capteurs de types différents.
CemOA
: archive
ouverte
d'Irstea
PARTIE II :
Présentation des outils et de la base de données B.I.C.H.E
CemOA
: archive
ouverte
d'Irstea
1. Présentation des outils
1.1 L'environnement PostgreSQL
PostgreSQL est un système de gestion de base de données relationnelle et objet. C'est un logiciel libre, c'est-à-dire toutes les sources sont disponibles. Il est un descendant OpenSource du code original de Berkeley.
Il supporte une grande partie du standard SQL et contient les nombreuses fonctionnalités modernes : o Requêtes complexes o Clés étrangères o Triggers o Vues o Intégrité transactionnelle
o Contrôle des versions concurrentes
Il est possible d'effectuer des modifications sur le logiciel PostgreSQL de manière à lui ajouter de :
o Nouveaux types de données o Nouvelles fonctions
o Nouveaux opérateurs
o Nouvelles fonctions d'agrégation o Nouvelles méthodes d'indexage
PostgreSQL fonctionne sous de nombreux systèmes d'exploitation tels que, par exemple Solaris, Linux, Unix etc. Depuis la version 8.0, il fonctionne également sous le système Windows.
Il est concurrent d'autres systèmes de gestion de base de données, qu'ils soient libres (comme MySQL), ou propriétaires (comme Oracle, Sybase, DB2 et Microsoft SQL Server).
PostgreSQL fonctionne suivant une architecture client/serveur :
o Partie serveur : application fonctionnant sur la machine hébergeant la base de données (le serveur de bases de données) capable de traiter les requêtes des clients.
o Partie client : installée sur toutes les machines nécessitant d'accéder au serveur de base de données (un client peut éventuellement fonctionner sur le serveur lui-même) Les clients interrogent ainsi le serveur de bases de données à l'aide de requêtes SQL. [W3]
CemOA
: archive
ouverte
d'Irstea
1.2 Présentation du langage PHP
Le langage PHP, qui signifie "PHP: Hypertext Preprocessor", est un langage interprété (un langage de script). Il peut être exécuté par un serveur. Le serveur peut interpréter et générer le code PHP.
Le langage PHP a été crée au début de l'automne 1994 par Rasmus Lerdorf. Aujourd'hui, le langage PHP en est à sa cinquième version.
La syntaxe du langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont :
o Une grande communauté de développeurs partageant des centaines de milliers d'exemples de script PHP
o Les codes sources sont gratuits (PHP est distribué sous licence GNU GPL) o L'écriture des scripts est simple
o La possibilité d'inclure le script PHP au sein d'une page HTML
o La simplicité d'interfaçage avec des bases de données, de nombreux SGBD étant supportés
o L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, etc.)
Ce schéma explique le fonctionnement du langage PHP :
Figure 5 : Fonctionnement du langage PHP
(Source: http://fr.wikipedia.org/wiki/Fichier:Php_arch_shema.png)
Dans une utilisation Web, l'exécution du code PHP se déroule ainsi : lorsqu'un visiteur demande à consulter une page Web, son navigateur envoie une requête au serveur HTTP correspondant. Si la page est identifiée comme un script PHP, le serveur appelle l'interprète PHP qui va traiter et générer le code final de la page (constitué généralement d'HTML ou de XHTML, mais aussi souvent de CSS et de JS). Ce contenu est renvoyé au serveur HTTP, qui l'envoie finalement au client. [W2, W4, W5]
CemOA
: archive
ouverte
d'Irstea
2. La base de données B.I.C.H.E. du Cemagref
Pour gérer les gros volumes de données générés par les capteurs sans fil, deux solutions étaient possibles : soit créer une nouvelle base de données, soit utiliser une base de données existante. La deuxième solution a été retenue car la base de données B.I.C.H.E. du Cemagref possède, dès le départ, un sous-ensemble des fonctionnalités recherchées.
La base B.I.C.H.E, qui signifie Biologie Chimie Hydrologie pour une base Ecologique, a été créée pour entreposer les données de différentes natures du Cemagref de Lyon. Cette base a été créée sous l'environnement PostgreSQL. Il contient trois parties: Biologie, Physico-chimie et Hydrologie. Donc on travaille dans la partie Hydrologie.
Les avantages de la base de données B.I.C.H.E. sont principalement :
o Fonctionnement sous un modèle Client/Serveur : plusieurs personnes peuvent ainsi accéder aux données en même temps ;
o Existence d'un module dédié à l'hydrologie.
Pour l’application qui nous concerne, cette base possède aussi un certain nombre d’inconvénients. La base de données B.I.C.H.E. dispose, en effet, nativement d’un module traitant de l’hydrologie mais, celui-ci commençant à devenir ancien, il ne dispose pas de certaines fonctionnalités importantes. De plus, certaines parties de la base de données étant communes aux différentes thématiques, cela rend complexe leurs éventuelles modifications.
2.1 L'architecture
La figure (Figure 6) suivante présente le principe de fonctionnement de la base B.I.C.H.E.
Figure 6 : L'architecture de la base B.I.C.H.E. Station de supervision Transfert des données non automatisé B.I.C.H.E. PostgreSQL Serveur APACHE CemOA : archive ouverte d'Irstea / Cemagref
Notre système d'information est représenté sous forme d'une station de traitement avec un système de base de données dans lequel seront stockées les données envoyées par le réseau de capteurs sans fil. Cependant les données envoyées doivent être mise en forme avant de les mettre à disposition des utilisateurs. La réalisation des fonctionnalités nécessite un développement spécifique au niveau des scripts PHP.
On utilise le langage PHP qui permet de produire les pages Web dynamique. Lorsqu'un visiteur demande à consulter une page Web, son navigateur envoie une requête au serveur tel que Apache et peut fonctionner comme n'importe quel langage interprété de façon locale.
2.2 Vue d'environnement Web
Figure 7 : Vue d'environnement Web
La figure ci-dessus représente la page principale Web de la base de données B.I.C.H.E. Depuis cette page, on peut accéder à l'un des trois domaines de recherche abordés dans la base de données : biologie, physico-chimie et hydrologie. Mon travail est dans le cadre de l'hydrologie. CemOA : archive ouverte d'Irstea / Cemagref
2.3 Vue de la base de données présente sous PostgreSQL
Figure 8 : Vue de la base de données présente sous PostgreSQL
Le schéma de la base de données comporte de nombreuses tables. Cela rend son étude assez complexe d'autant plus que certaines tables sont communes à différents domaines (biologie, physico-chimie, hydrologie). Par conséquent, toutes modifications sur celles-ci doit être réalisées avec précaution. Si une table commune est changée dans le cadre d'une modification concernant l'hydrologie, il est possible qu'elle ne puisse plus être plus utilisable pour les deux autres domaines.
Le nombre de table n'est pas fixé. Quand l'utilisateur souhaite importer les mesures d’une nouvelle station de chronique qui représente un capteur sans fil dans la page Web, le serveur va créer automatiquement une table qui correspond la nouvelle station pour gérer les mesures. Donc, il y a toujours quelques tables que l'on peut considérer comme « temporaires ».
Je vais prendre un exemple pour illustrer le processus de création dynamique, sous la base de données B.I.C.H.E., d'une table relative à un nouveau point de mesure ou d'observation.
CemOA
: archive
ouverte
d'Irstea
Je souhaite importer les mesures pour une nouvelle station 'Pluviometre rural' avec le code de station 69154011. Il faut ajouter cette nouvelle station d'abord. La figure 9 présente la nouvelle station '69154011' créée.
Figure 9 : Requête SQL pour la table de station
Quand j'ai importé les mesures dans cette nouvelle station, la base de données B.I.C.H.E. a été modifiée automatiquement avec l'ajout de nouvelles tables. La figure suivante (Figure 10) montre les changements obtenus, sous PostgreSQL, dans notre base de données.
CemOA
: archive
ouverte
d'Irstea
Figure 10 : Les changements sous l’environnement PostgreSQL
La nouvelle table s’appelle mes_p69154011v0 et stocke toutes les données de la station ‘Pluviometre rural’ qui viennent d'être insérées.
CemOA
: archive
ouverte
d'Irstea
PARTIE III :
Evolution de la base de données B.I.C.H.E
CemOA
: archive
ouverte
d'Irstea
1. Introduction
Ce chapitre présente les évolutions réalisées sur l'interface de la base B.I.C.H.E. pour une meilleure gestion au niveau de l'application. Je vais expliquer proprement toutes les étapes de développement.
Figure 11 : Evolutions des fichiers de chroniques
Le schéma ci-dessus présente les principales étapes de traitement des fichiers de mesures dans notre système d'information. Le fichier qui été enregistré par le capteur sans fil est dit « le fichier brut ». Pour importer les fichiers dans notre base de données, il faut mettre les fichiers bruts au bon format. Ensuite, on peut analyser les données et visualiser les chroniques de mesure d'une station dans un intervalle donné. Enfin, on peut exporter les fichiers de données au même format que celui qui permet l'importation.
2. Importation des chroniques de mesure
D'abord, j'ai commencé par importer les chroniques de mesure dans notre base de données. Le fichier à importer a le format suivant :
Figure 12 : Le format du fichier importation
Fichiers Bruts Module de Mise au format Fichier au bon format de données Module d'importation Module d'exportation B.D. Analyse et Traitements STATION ;$code_de_la_station PARAMETRE ;$parametre PAS DE TEMPS ;$pas_de_temps UNITE DE MESURE ;$unite_de_mesure $date_heure;$valeur;$qualite $date_heure;$valeur;$qualite $date_heure;$valeur;$qualite CemOA : archive ouverte d'Irstea / Cemagref
Pour que l'importation du fichier dans notre base de données soit parfaite et n'engendre pas d'erreurs, j'ai ajouté une page pour changer le format de fichier brut automatiquement. Mais il faut quand même indiquer un certain nombre d'informations relatives à la nature des données importées.
Figure 13 : Vue de la page "Changer le format de fichier brut"
3. Affichage des mesures
La base de données dispose des informations permettant de connaitre les principaux événements détectés par les stations du réseau.
J'ai ajouté un sous menu qui s'appelle "Affichage" parmi le menu de consultation. Dans ce sous menu, j'ai ajouté deux liens. Le premier a été nommé "Affichage d'une station" faisant appel au script "affichage.php". Il sort la liste des stations avec le nom et le code de chacune d'entre elles. Le deuxième a été nommé "Affichage des deux stations" faisant appel au script "affichage2.php" (voir annexe 2). Il a été créé pour la partie comparaison de deux stations. Je vais le présenter dans la partie suivante.
La capture d'écran ci-dessous représente le résultat d'exécution du script "affichage.php":
CemOA
: archive
ouverte
d'Irstea
Figure 14 : Liste des stations ayant des chroniques de mesure
Lorsqu'on clique sur le champ "Code station", on fait appel à un autre script qui va nous récupérer d'autres informations sur la station choisie comme, par exemple, la lacune, les mesures hydrologiques par mois ou par années. J'ai utilisé les anciens résultats d'exécution du script comme dans le menu "Graphe". Donc chaque fois on peut détailler les chroniques de mesure et choisir une période et afficher le graphe correspondant.
Les deux figures suivantes présentent un exemple d'affichage des chroniques par une station.
Figure 15 : Liste des chroniques
CemOA
: archive
ouverte
d'Irstea
Figure 16 : Consultation journalière de la station MercierExu
4. Affichage graphique pour un intervalle sélectionné
Pour une meilleure supervision, j'ai ajouté un sous-menu "Sélectionner un intervalle" avec deux liens (voir annexe 1). Le premier lien nommé "graphique" permet aux utilisateurs de choisir la station et de saisir un intervalle, il affiche le graphe. Le deuxième lien nommé "données" suit les mêmes étapes que le premier lien sauf qu'il affiche les données dans un tableau. Enfin, il peut exporter les données dans un nouveau fichier au format d'importation. Dans le paragraphe suivant, est fourni un exemple d'affichage des mesures de manière graphique.
4.1 Affichage des mesures graphiquement
La figure ci-dessous présente la page de sélection d'une station et d'un intervalle.
CemOA
: archive
ouverte
d'Irstea
Figure 17 : Sélection un intervalle pour une station
J'ai mis un champ d'entrée avec l'option 'select' pour choisir une station d'abord. Puis il faut entrer la date de début et la date de fin au bon format, par exemple '04/06/2007 20:0'. Si tous les champs sont remplis, appuyez sur le bouton 'Entrer'. Les données saisies sont transférées à un script "courbebis.php" qui a pour fonction d'afficher le graphe requis. La capture d'écran ci-dessous représente le résultat d'exécution du script :
Figure 18 : Graphe des mesures dans un intervalle pour une station
CemOA
: archive
ouverte
d'Irstea
Le graphe représente les mesures de la station MercierExu entre 20 h et 21 h le 04 Juin 2007. L'axe des abscisses Y correspond à la valeur d'hauteur de l'eau. Et l'axe des abscisses X correspond au numéro de mesure ou de relevé dans l'intervalle de temps concerné. Ce numéro est indiqué en première colonne du tableau de la partie suivante "affichage des mesures directement".
4.2 Affichage des mesures directement
On procède de la même façon que ci-dessus c'est-à-dire on commence par saisir la station et l'intervalle de temps souhaités. Lorsqu'on clique sur le bouton 'Entrer', le script "selectinter_donnee.php" est appelé et sont affichés toutes les informations saisies ainsi qu'un tableau contenant les mesures. La capture d'écran ci-dessous représente le résultat d'exécution du script :
Figure 19 : Tableau des données dans un intervalle sélectionné
De plus, il est possible de cliquer sur le bouton 'OK' pour exporter les données qui sont affichées dans le tableau. (Voir annexe 3) Le nouveau fichier qui s'appelle 'test.txt' (Figure 20) est au format d'importation.
CemOA
: archive
ouverte
d'Irstea
Figure 20 : Le fichier d'exportation
5. Comparaison de deux stations
Pour une meilleure ergonomie, j'ai ajouté un lien nommé "Affichage des deux stations" dans le sous-menu "Affichage" pour comparer les mesures de deux stations dans un intervalle sélectionné.
Une fois la période sélectionnée par l'utilisateur, il faudrait exporter les données sous forme de tableau avec une seule colonne pour les dates. Mais les capteurs sont cadencés à 2 minutes et n'enregistrent pas tous dans la même minute. A ce niveau il y a un algorithme permettant de combler les lacunes. L'idée est d'obtenir en sorite le tableau ci-dessous :
CemOA
: archive
ouverte
d'Irstea
Figure 21 : Chroniques de mesure hydrologiques des stations ancienne version
Avec cette présentation, la datation exacte de chaque relevé est perdue. Après discussion avec les futurs utilisateurs, pour l'ajout de nouvelles fonctionnalités, nous sommes revenus à un fonctionnement à la minute plutôt qu'à la fréquence d'acquisition (toutes les 2 ou 3 minutes). Comme dans la partie précédente, il faut saisir les stations qu'on souhaite comparer et l'intervalle de temps. J'ai utilisé la même page "sélection d'un intervalle" et ajouté un autre champ d'entrée pour saisir la deuxième station.
Lorsque l'on clique sur le bouton 'Entrer', toutes les informations saisies et les mesures des deux stations sont affichées dans un tableau. La figure suivante présente le résultat d'exécution du script : CemOA : archive ouverte d'Irstea / Cemagref
Figure 22 : Chroniques de mesure hydrologiques des stations
Cette figure affiche les informations des deux stations d'abord. Puis il fournit en sortie un tableau avec une colonne de temps et une colonne pour chaque station avec leurs chroniques de mesure. Toutes les stations n'étant pas démarrées au même moment, leurs données appartiennent au même intervalle de temps (2 minutes) mais pas forcement à la même minute. Un affichage avec une colonne indiquant la minute exacte d'acquisition plutôt que l'intervalle a été, dans cet exemple, privilégié.
La figure (Figure 23) ci-dessous présente les courbes des chroniques de mesure, avec l'axe des abscisses X qui correspond à la première colonne du tableau précédent. (Voir annexe 4)
CemOA
: archive
ouverte
d'Irstea
Figure 23 : Comparaison graphique entre les stations
Les deux courbes représentent les hauteurs d'eau des deux différentes stations pour un intervalle de temps donnée. Durant les tests, par plusieurs fois, j’ai constaté des problèmes d’affichage. Si on souhaite afficher un trop grand nombre de données dans un graphe, l’axe des abscisses X est illisible. Pour résoudre ce problème, j’ai rajouté une colonne au tableau précédent pour numéroter chaque relevé.
CemOA
: archive
ouverte
d'Irstea
CONCLUSION
Le but de ce stage était l'adaptation, le développement et l'évaluation d'un système d'information destiné à administrer les données provenant d'un réseau de capteurs hydrologiques communiquant.
Lors de ce stage j'ai rencontré quelques difficultés. Tout d'abord je ne connaissais pas l'hydrologie et la base de données B.I.C.H.E. Cette base a été créée pour gérer des données liées à l’écologie. Ensuite, je me suis familiarisé avec les outils et les langages informatiques utilisés.
Ce stage m'a ainsi permis de mettre en pratique les connaissances théoriques et pratiques acquises lors de ma formation, et d’en acquérir de nouvelles relatives à l’utilisation du langage PHP et du logiciel PostgreSQL. Cette expérience a mis en évidence des points très positifs.
Ce projet a également été l'occasion de me plonger dans le milieu de la recherche. Ce stage au Cemagref m'a permis de rencontrer des chercheurs et de partager leurs expériences. J'ai également eu la chance de travailler au sein d'une équipe accueillante et chaleureuse.
Le bilan de ce stage est dans l'ensemble positif, les principaux buts du projet étant accomplis. La plus grande partie du travail qui m'a été demandée a été réalisée. Les quelques modifications ou améliorations qui restent à apporter aux différents programmes développés seront effectuées durant le mois de stage qui me reste.
Ce stage est une expérience enrichissante, il me permet de clore ma deuxième année de Master 2 Informatique et me donne également un aperçu du travail dans le milieu de la recherche. CemOA : archive ouverte d'Irstea / Cemagref
REFERENCES BIBLIOGRAPHIQUES
[R1] FAHMANI MED EL MAHDI, 2008, Conception, réalisation et évaluation d'un système d'information destine à administrer les données provenant d'un réseau de capteurs hydrologiques communiquant, Mémoire de projet de fin d'études, Université Claude Bernard Lyon 1.
[R2] SARRAZIN B., 2008, SGBD et Réseau de capteurs limnimétriques capacitifs, Thèse, Cemagref, ISARA Lyon.
[R3] GALLOT K., 2005, Le Grand Livre De Php 5; Developpement Objet, Applications Pratiques.
WEBOGRAPHIES
[W1] http://fr.wikipedia.org/wiki/ [W2] http://www.phpfrance.com/ [W3] http://www.postgresql.org/ [W4] http://www.php.net/ [W5] http://www.commentcamarche.net/contents/php/phpintro.php3 CemOA : archive ouverte d'Irstea / CemagrefANNEXES
CemOA : archive ouverte d'Irstea / CemagrefAnnexe 1
La figure suivante représente l’arborescence des fichiers PHP qui ont été ajoutés dans le menu de consultation :
Figure A.1 : Arborescence du menu
"
affichage"
Figure A.2 : Arborescence du menu
"
sélection d’un intervalle"
Menu Sélection d’un intervalleselectinter.php selectinter2.php
courbebis.php selectinter_donnee.php
exporter.php Affichage des données d’une
station (graphiquement)
Affichage de la courbe
Affichage des données d'une station
Sélection d'un intervalle
Exportation des données Menu Affichage
affichage.php affichage2.php
trace_compa.php
selectinter3.php
courbe2.php
Affichage une staton
Sélection d’une station
Comparaison deux stations
Sélection d'un intervalle
Affichage des courbes
CemOA
: archive
ouverte
d'Irstea
Annexe 2
Script "affichage2.php"
<? …..
$tpl->assign('TITRE',"Comparer les deux stations"); $tpl_ente->expand();
$tpl->assign('LIBELLE_CHAMP',"Sélectionner la première station"); $tpl->assign('NOM_CHAMP',"station1");
//selection les stations
$stationQ = $dbConn->query("
SELECT DISTINCT m.bassin,nom_milieu,c.id_chronique, tp.nom_type_parametre, c.unite_temps, c.pas_temps, s.code_station, s.nom_station, AVG(taux), MIN(annee), MAX(annee)
FROM station s, param_chro_hydro p, type_param_hydro tp, chronique_hydro c, lacune_hydro l,milieu m
WHERE c.id_parametre_chronique=p.id_parametre_chronique AND tp.code_type_parametre=p.code_type_parametre
AND p.code_station = s.code_station AND c.id_chronique = l.id_chronique AND s.id_milieu=m.id_milieu
GROUP BY m.bassin,c.id_chronique, tp.nom_type_parametre, c.unite_temps, c.pas_temps, s.code_station, s.nom_station,nom_milieu"); for($station1=$stationQ->first();!$stationQ->atEnd();$station1=$stationQ->next()) { $tpl->assign('OPTION_VALUE', $station1['nom_station']); $tpl->assign('OPTION_VALUE_AFFICHER',$station1['code_station']); $tpl_option->expand(); } $tpl_liste->expand(); $tpl_form2->expand();
$tpl->assign('LIBELLE_CHAMP',"Sélectionner la deuxième station"); $tpl->assign('NOM_CHAMP',"station2"); for($station2=$stationQ->first();!$stationQ->atEnd();$station2=$stationQ->next()) { $tpl->assign('OPTION_VALUE', $station2['nom_station']); $tpl->assign('OPTION_VALUE_AFFICHER',$station2['code_station']); $tpl_optionB->expand(); } $tpl_liste1->expand(); $tpl_form3->expand();
$tpl->assign('SSTITRE',"Selectionner un intervalle, le format d'entre commence par jour, date, année, heure et minute. ex: 06/06/2007 20:00");
$tpl_ssente->expand(); $tpl->assign('LIBELLE_CHAMP',"Date de début"); $tplLigne_d->expand(); $tplLigne_m->expand(); CemOA : archive ouverte d'Irstea / Cemagref
$tplLigne_y->expand(); for($i=0;$i<=24;$i++) { $h[$i]=$i; $tpl->assign('OPTION_HEURE',$h[$i]); $tpl->assign('OPTION_HEURE_AFFICHER', $h[$i]); $tpl_option1->expand(); } $tplLigne_h->expand(); for($j=0;$j<60;$j++) { $m[$j]=$j; $tpl->assign('OPTION_HEURE',$m[$j]); $tpl->assign('OPTION_HEURE_AFFICHER', $m[$j]); $tpl_option2->expand(); } $tplLigne_min->expand(); $tpl_libelle->expand(); $tpl->assign('LIBELLE_CHAMP',"Date de fin"); $tplLigne_d2->expand(); $tplLigne_m2->expand(); $tplLigne_y2->expand(); for($i=0;$i<=24;$i++) { $h1[$i]=$i; $tpl->assign('OPTION_HEURE',$h1[$i]); $tpl->assign('OPTION_HEURE_AFFICHER', $h1[$i]); $tpl_option3->expand(); } $tplLigne_h2->expand(); for($j=0;$j<60;$j++) { $m1[$j]=$j; $tpl->assign('OPTION_HEURE',$m1[$j]); $tpl->assign('OPTION_HEURE_AFFICHER', $m1[$j]); $tpl_option4->expand(); } $tplLigne_min2->expand(); $tpl_libelle2->expand(); //$tpl_form1->expand(); $tplVar->expand(); $script = "selectinter3.php"; $tpl->assign('SCRIPT', $script); $tpl_form1->expand(); $tpl->expand(); $tpl->printContent(); // met le pied de page $pageLayout->footer(); ?> CemOA : archive ouverte d'Irstea / Cemagref
Annexe 3
Script "exporter.php"
<?
// Charge la déf de la classe Template require_once ('Template/Template.inc'); // Charge classe pageLayout
require_once ('pageLayout.inc'); // Charge les libelles
require_once('chroniques/libelles.inc'); // Charge infoChronique pour les ronds
require_once('chroniques/infoChronique.inc'); //avec requiere_once on se rassure que le code ne se rajoute qu'une seul fois.
$titre = "B.I.C.H.E Hydrologie"; // on crée une instance de pageLayout
$pageLayout = new pageLayout("Consultation",NULL,NULL,NULL,'hydrologie'); $pageLayout->setTitle($titre);
$pageLayout->displayNavPanel(TRUE); //on enlève les liens intranet
$pageLayout->displayStandardLinks(FALSE); // je met le menu approprié
include_once('menus/manuHydroConsult3.inc'); // met l'entête
$pageLayout->header();
$dbConn =& new dbConnection(); // nouvel objet Template
$tpl =& new Template(); // Chargement du modèle
$tpl->loadTemplate('exportation.html'); $tpl_ente = & $tpl->getBlock('titre'); $tplLien = & $tpl->getBlock('lien'); $tpl->assign('TITRE',"Exportation"); $tpl_ente->expand(); $codestation=$_POST["codestation"]; $parametre=$_POST["parametre"]; $pasdetemps=$_POST["pasdetemps"]; $unitedemesure=$_POST["unitemesure"]; $nomtable=$_POST["nomtable"]; $datedeb=$_POST["datedeb"]; $datefin=$_POST["datefin"]; ////////////////////////////////////////////////// $fuseau="GMT"; CemOA : archive ouverte d'Irstea / Cemagref
$unite="mm"; ///////////////////////////////////////////////// $fpt2=fopen("test.txt","w"); fputs($fpt2,"STATION\n".";".$codestation."\n"); fputs($fpt2,"PARAMETRE\n".";".$parametre."\n"); fputs($fpt2,"PAS DE MESURE\n".";".$pasdetemps.$unitedemesure."\n"); fputs($fpt2,"UNITE DE MESURE\n".";".$unite."\n"); fputs($fpt2,"FUSEAU\n".";".$fuseau."\n"); $infoT = $dbConn->query(" SELECT dateheure,valeur FROM $nomtable
WHERE dateheure BETWEEN '$datedeb' AND '$datefin' ORDER BY dateheure"); for($chronique1=$infoT->first();!$infoT->atEnd();$chronique1=$infoT->next()) { $date=explode("/",$chronique1['dateheure']); fputs($fpt2,$date[1]."/".$date[0]."/".$date[2].";".$chronique1['valeur'].";"."v"."\n"); } fclose($fpt2);
$tpl->assign('TEXTEQQ',"Le fichier est été exporté."); $tpl->assign('SCRIPT_LIEN','selectinter2.php');
$tpl->assign('LIBELLE_LIEN',"Retour la page de selection un intervalle"); $tplLien->expand(); $tpl->expand(); $tpl->printContent(); $pageLayout->footer(); ?> CemOA : archive ouverte d'Irstea / Cemagref
Annexe 4
Script "courbe2.php"
<?
// Charge la déf de la classe Template require_once ('Template/Template.inc'); // Charge classe dbConnection
require_once ('dbClasses.inc'); // Charge classe pageLayout require_once ('pageLayout.inc'); // Charge les libelles
require_once('chroniques/libelles.inc'); // Charge infoChronique pour les ronds
require_once('chroniques/infoChronique.inc'); //avec requiere_once on se rassure que le code ne se rajoute qu'une seul fois.
// Charge tracage pour le graphe
require_once("chroniques/tracage.inc"); $titre = "B.I.C.H.E Hydrologie";
// on crée une instance de pageLayout
$pageLayout = new pageLayout("Consultation",NULL,NULL,NULL,'hydrologie'); $pageLayout->setTitle($titre);
$pageLayout->displayNavPanel(TRUE); //on enlève les liens intranet
$pageLayout->displayStandardLinks(FALSE); // je met le menu approprié
include_once('menus/manuHydroConsult3.inc'); // met l'entête
$pageLayout->header();
$dbConn =& new dbConnection(); // nouvel objet Template
$tpl =& new Template(); // Chargement du modèle
$tpl->loadTemplate('saisie_intervalle2.html'); // récupération de blocs
$tplTitre = & $tpl->getBlock('titre'); $tplForm = & $tpl->getBlock('form'); $tplListe = & $tplForm->getBlock('liste'); $tplSstitre = & $tplForm->getBlock('sstitre'); $tplTab = & $tplForm->getBlock('tableau'); $tplEt = & $tplTab->getBlock('entete_tableau'); $tplCol = & $tplEt->getBlock('colonne');
$tplColSimple = & $tplCol->getBlock('colonne_simple'); $tplColLien = & $tplCol->getBlock('colonne_lien');
CemOA
: archive
ouverte
d'Irstea
$tplLigne = & $tplTab->getBlock('ligne'); $tplCase = & $tplLigne->getBlock('case'); $tplElem = & $tplCase->getBlock('element');
$tplElemLien = & $tplCase->getBlock('element_lien'); $tpl->assign('TITRE',"Zoom"); $tplTitre->expand(); $tpl->expand(); $tpl->printContent(); $station1 = $_POST["station1"]; $station2 = $_POST["station2"]; $datedeb = $_POST["date_debut"]; $datefin = $_POST["date_fin"]; $chroniqueA=$dbConn->query("
SELECT dateheure, valeur FROM $station1
WHERE dateheure BETWEEN '$datedeb' AND '$datefin' ORDER BY dateheure");
$chroniqueB=$dbConn->query("
SELECT dateheure, valeur FROM $station2
WHERE dateheure BETWEEN '$datedeb' AND '$datefin' ORDER BY dateheure"); $i=0; for($chronique1=$chroniqueA->first();!$chroniqueA->atEnd();$chronique1=$chroniqueA->next()) { //$tabtimeA[$i] =$chronique1['dateheure']; $tabtimeA[$i] = substr($chronique1['dateheure'],11,5); $tabA[$i] = $chronique1['valeur']; $i++; } $j=0; for($chronique2=$chroniqueB->first();!$chroniqueB->atEnd();$chronique2=$chroniqueB->next()) { $tabtimeB[$j] = $chronique2['dateheure']; $tabB[$j] = $chronique2['valeur']; $j++; } include ("src/jpgraph.php"); include ("src/jpgraph_line.php"); $ydata = $tabA; $ydata2 = $tabB; CemOA : archive ouverte d'Irstea / Cemagref
// Create the graph. These two calls are always required $graph = new Graph(1000,600,"auto");
$graph->SetScale("textlin"); $graph->img->SetMargin(60,20,20,50); $graph->SetShadow(); $graph->ygrid->Show(true,true); $graph->xgrid->Show(true,false); $graph->xaxis->SetTextLabelInterval(2); // Create the linear plot
$lineplot=new LinePlot($ydata); $lineplot2=new LinePlot($ydata2); // Add the plot to the graph
$graph->Add($lineplot); $graph->Add($lineplot2);
$lineplot-> mark->SetType(MARK_UTRIANGLE); $lineplot2-> mark->SetType(MARK_DIAMOND); $graph->title->Set("station ".$station1." et ".$station2); $graph->xaxis->title->Set("date"); $graph->yaxis->title->Set("hauteur de l'eau"); $graph->title->SetFont(FF_FONT1,FS_BOLD); $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); $lineplot->SetColor("blue"); $lineplot->SetWeight(2); $lineplot2->SetColor("orange"); $lineplot2->SetWeight(2); $lineplot->SetLegend("station ".$station1); $lineplot2->SetLegend("station ".$station2); $graph->yaxis->SetColor("red"); $graph->yaxis->SetWeight(2); $graph->SetShadow();
// Display the graph
$graph->Stroke("graph0.png");
echo "<BR><img src='graph0.png'/>"; // met le pied de page
$pageLayout->footer();?> CemOA : archive ouverte d'Irstea / Cemagref