Exemple-Rapport de Stage Developpment
Exemple-Rapport de Stage Developpment
Exemple-Rapport de Stage Developpment
PROMOTION 2020/2022
Volume 1/1
Je tiens en premier lieu à remercier mon maitre de stage, M. André FERRARI, professeur
au sein de l’Université de Nice Côte d’Azur et chercheur au Laboratoire Lagrange, sans qui ce
stage n’aurait pas été possible. Je le remercie de m’avoir offert ce stage qui m’a donnée
l’opportunité d’intégrer son équipe et de m’avoir accompagnée tout au long de mon stage. J’ai
particulièrement apprécié la confiance qu’il m’a accordée et l’aide qu’il m’a offerte. J’ai aussi pu,
grâce à lui, acquérir des compétences qui me seront utiles dans mon cursus professionnel.
REMERCIEMENTS ........................................................................................................... 3
PRÉSENTATION DE L’OBSERVATOIRE DE LA CÔTE D’AZUR ............................. 5
PRESENTATION DU LABORATOIRE LAGRANGE ET DE L’ÉQUIPE SIGNAL ET
IMAGE (SI) ……………………………………………………………………………….....7
PRÉSENTATION DU PROJET ........................................................................................ 8
ABSTRACT…………………………………………………………………………………10
INTRODUCTION GÉNÉRALE ...................................................................................... 11
I. Visualisation de la carte de Nice et de la trace de fibre optique sur l’interface web ... 12
1.1 Choix des outils et des logiciels pour l’environnement de développement ........................................12
1.2 Réalisation de la carte de Nice avec la librairie « Leaflet »................................................................15
1.3 Insertion de la trace de fibre optique sur la carte réalisée ...................................................................17
II. Extrait des positions et la calibration des capteurs ..................................................... 21
2.1 L’extrait des coordonnées des capteurs positionnés à un intervalle défini.........................................21
2.2 L’affichage des capteurs le long de la fibre avec plugin « Leaflet.markercluster » ...........................25
2.3 La calibration des capteurs .................................................................................................................28
III. La structure du menu et l’insertion de la base de données …………..……………...37
3.1 La structure et le fonctionnement du menu ........................................................................................37
3.2 L’insertion de la base de données « InfluxDB » ................................................................................45
3.3 La présentation des données en interagissant avec la base de données ..............................................48
CONCLUSION ................................................................................................................. 52
BIBLIOGRAPHIE ............................................................................................................ 53
ANNEXES…………………………………………………………………………………...54
Annexe A : Journal de Bord du stage avec deux exemples ......................................................................54
Annexe B : Le code pour afficher des capteurs dans le mode calibration ................................................56
Annexe C : Le code pour la calibration des capteurs................................................................................58
Annexe D : L’exemple des données stockées dans InfluxDB sur web UI................................................60
Annexe E : Le code pour récupérer et afficher les informations du bucket choisi ...................................61
TABLE DES ILLUSTRATIONS ..................................................................................... 62
LISTE DES ABRÉVIATIONS ......................................................................................... 64
L’Observatoire de la Côte d’Azur est actuellement dirigé par M. Stéphane MAZEVET depuis le
1er juillet 2021, avec un effectif d’environ 450 personnes. Il est localisé sur 4 sites géographiques :
Les responsabilités de l’OCA sont d’explorer, de comprendre et de valoriser les sciences de la Terre
et de l’Univers, que ce soit en astrophysique, en sciences de la Terre, mais également dans les
sciences connexes le traitement du signal et l’optique. D’autre part, les laboratoires de l’OCA
contribuent à la formation universitaire à l’UNS de la licence jusqu’au doctorat. Il est impliqué
dans sa mission de diffusion de connaissances vers tous les publics et la mis en place d’un dispositif
d’observations en astrophysiques et en géosciences.
Durant mon stage pendant 11 semaines, j’ai été accueillie par le laboratoire J.-L. LAGRANGE qui
est l’une des unités de recherche de l’OCA. Il se constitue de deux sites : Bâtiment Fizeau à Valrose
Université Nice Côte d'Azur et Pavillon Evry Schatzman à Boulevard de l'Observatoire Nice. Je
travaillais dans le bâtiment Fizeau dans l’équipe Signal et Image (SI).
Actuellement dirigé par M. Philippe STEE, le Laboratoire Lagrange emploie 118 permanents et 23
doctorants, ceux-ci sont repartis dans les 6 équipes suivantes :
1) Équipe Galaxies et Cosmologie
2) Équipe Méthodes Physiques pour l’Observation (MPO)
3) Équipe Physique Stellaire et Solaire
4) Équipe Signal & Image (SI)
5) Équipe Théorie et Observations en Planétologie (TOP)
6) Équipe Turbulence Fluide et Plasma
Je me suis intégrée dans l’équipe Signal et Image (SI) qui est dirigée par mon maître de stage, M.
André FERRARI. Cette équipe a pour vocation de développer des algorithmes avancés en
traitement du signal et des images dans le cadre des Sciences de l’Univers, en particulier de
l’astronomie.
Dans l’équipe SI, je travaillais avec l’équipe DAS qui n’incluent pas tous les personnels de l’équipe
SI. Cette équipe DAS se compose de 8 personnes : 3 permanents, 1 postdoctorant, 1 étudiant
doctorant et 3 stagiaires.
Wan Nur
Cédric
Munira BINTI
RICHARD
ZAIDAN
Mon stage a débuté le 4 avril 2022. J’ai travaillé avec une autre stagiaire, Munira, qui est ma
camarade à l’IUT. Le matériel qui m’a été fourni est un ordinateur iMac de marque Apple et je
travaillais dans un open-space au quatrième étage du bâtiment.
Dans un premier temps, j’ai été amenée à comprendre ce que la technologie DAS mesure
le long de la fibre et quels sont les résultats récupérés par l’équipe qui développe les algorithmes.
Pour ce faire, mon maître de stage, M. FERRARI nous a fait une courte présentation afin de nous
expliquer le fonctionnement de l’interrogateur DAS et nous montrer les données mesurées. Pendant
les deux premières semaines de ce stage, j’ai travaillé avec Munira sur la même tache. Notre
première mission était de créer la page HTML, contenant la carte de Nice avec la trace de fibre
optique. Une fois cette étape a été accomplie, avec les coordonnées de la trace de fibre optique,
nous avons ensuite déduit les coordonnées des capteurs qui sont positionnés à un intervalle défini
(distance de jauge) le long de la fibre.
Ma seconde mission était de réaliser la calibration des positions des capteurs sur
l’application web. A partir de ce moment-là, Munira et moi avons travaillé séparément. Pour savoir
concrètement ce qu’ils demandaient, j’ai beaucoup discuté avec M. FERRARI, M. RICHARD et
M. VAN DEN ENDE. Enfin, j’ai développé un algorithme qui nous permet de changer les postions
des capteurs automatiquement sur l’application web. Pour ce faire, j’ai appliqué la suggestion de
M. VAN DEN ENDE, calibration des capteurs avec les points de contrôles choisis par les
utilisateurs.
La mission suivante qui m’a été confiée était l’insertion de la base de données dans
l’application web pour remplacer le fichier CSV local. De nos scripts Javascript, j’ai récupéré les
données d’énergie, de pression et de comptage des véhicules qui sont stockées dans InfluxDB et
les ai affichées sur l’interface. L’utilisateur peut choisir la date et la durée pour visualiser les
données spécifiques. Par la suite, j’ai fait animer la trace en affichant les différents couleurs
correspondants à l’énergie à chaque capteur.
Au terme de ce stage, une application web qui sert à la visualisation des données et à la
vision globale de ce projet DAS a été réalisée. Ce sera un outil flexible et interactif pour faire des
analyses et les modifications dans le domaine des recherches en utilisant DAS.
First and foremost, I had to understand how DAS technology measures along the fiber and
what were the results retrieved by the team who develops the algorithms. Thus, my tutor, M.
FERRARI did a brief presentation to explain how DAS interrogator works and to show us the data
measured by the team. During the first two weeks of internship, I worked together with Munira on
the same task. Our first mission was to create a HTML page, containing the map of Nice with the
line of optical fiber. Once this task is accomplished, with all coordinates of the optical fiber, we
have deduced the coordinates of sensors which are located at a defined interval (gauge length)
along the fiber.
The next mission which was given to me was insertion of data base in the web application
to replace the local CSV file. By using our JavaScript code, I retrieved the energy data, strain data
and vehicle count data, which are stocked in InfluxDB, and I displayed them on the interface. Users
are able to choose date and duration to visualize some specific data. Next, I animated the trace by
showing different colors which correspond to energy at each sensor.
At the end of this internship, a web application used for visualization of data and for a
global vision of DAS project was produced. It will be a flexible and interactive tool to do analysis
and modifications in the research domain using DAS.
DAS est une technologie d’impulsion laser qui convertit les câbles de fibre optique en
milliers de capteurs de vibrations, positionnés tous les quelques mètres le long du câble à fibre
optique. Un interrogateur envoie systématiquement de courtes impulsions de lumière de laser à une
autre extrémité de la fibre et mesure la phase et l’amplitude des photons rétrodiffusés qui ont
interagi avec les nano courbures dans la fibre optique. En utilisant ces données, l’équipe SI a
effectué une étude de suivi du trafic et des véhicules sur un câble à fibre optique de 20 km déployé
le long d’une route principale à Nice, France.
Avec les algorithmes développés par l’équipe SI, une énorme quantité de données est donc
récupérée par exemple : les séries temporelles du signal, les données d’énergie, le nombre de
véhicules, l’estimation de la vitesse etc. Le fait qu’ils ont beaucoup de données mais qu’il n’y a pas
d’interface pour les représenter n'est pas optimale car c’est moins compréhensible avec les données
qui ne sont pas bien visualisées et regroupées. D’autre part, ils ont effectué la modification des
positions des capteurs manuellement, mais ceci leur a pris beaucoup de temps pour les vérifier un
par un.
C’est donc pour ces raisons que l’équipe SI nous a demandé de réaliser une application
web, qui peut leur faciliter la visualisation des résultats DAS de façon interactive et d’effectuer les
modifications flexibles. Cette application web va les aider à analyser les données efficacement et à
économiser leur temps de travail.
Durant ce stage, j’utilisais l’outil « Visual Studio Code », un éditeur de code extensible et open
source, pour écrire les lignes de code de Javascript de façon structurée et compréhensible. Il a été
classé comme l’outil d’environnement de développement le plus populaire. La facilité d’installer
des extensions, qui ajoutent des fonctionnalités supplémentaires, est la raison principale pour
laquelle je l’ai choisi comme mon outil d’environnement.
Par exemple, afin de pouvoir construire et tester notre application web dynamique, il m’a fallu un
serveur local, qui me permet d’actualiser automatiquement à chaque changement dans les scripts.
Avec Visual Studio Code, j’ai donc installé l’extension « Live Server » et ce qui me permettait de
lancer le serveur simplement sur l’outil afin qu’il actualise le navigateur lorsqu’il détecte les
changements dans nos scripts statiques. Cela me permettait de développer mes scripts et voir les
résultats en temps réel.
Nous avons travaillé sur des branches différentes. Une fois que nous avions terminé les
modifications, nous avons fusionné les deux branches avec la commande « git merge ». De plus,
nous pouvions récupérer les dernières modifications distantes du projet et les fusionner dans la
branche courante avec « git pull ».
L’illustration ci-dessous est un graphe de chronologie qui montre la répartition des branches. La
ligne noire représente la branche principale (main), les lignes bleues et vertes sont les branches qui
représentent les différentes étapes de travail. Les labels sont les noms des branches. Une fois une
étape accomplie, la branche va rejoindre la branche principale.
Au début du stage, je travaillais avec Munira sur la création de la carte et la visualisation de la trace
de fibre optique. Par la suite, nous nous sommes répartis nos tâches. Je travaillais sur l’affichage
des capteurs et la calibration, quant à Munira, elle travaillait sur la création du menu et l’affichage
des données avec Plotly. Au final, nous travaillions ensemble sur l’insertion de la base de données.
(Cf. Annexe A) pour voir deux exemples de mon journal de bord et la répartition de travail.
Pour construire cette application web, j’ai utilisé beaucoup de plugins et de libraires open-source.
Par conséquent, il y avait de nombreux fichiers. Tous les fichiers de type JavaScript, CSS, HTML,
JSON et les images sont bien organisés dans le dossier SequoiaFE. Les images, les scripts CSS et
les fichiers complémentaires se situent dans le sous dossier « src ». Les scripts principaux comme
script.js, menu.js, plotEnergyData.js, plotSrainData.js, plotVehicleData.js et index.html sont placés
directement dans le dossier SequoiaFE. Ainsi, je pouvais trouver et éditer facilement les fichiers et
bien garder la hiérarchie des fichiers.
En arrivant, mon maître de stage a fait une présentation de type PowerPoint, afin de nous expliquer
le fonctionnement de la technologie DAS et de nous montrer les résultats interprétés par l’équipe
qui s’occupe du développement de l’algorithme IA. En même temps, il nous a indiqué ce qu’il
attendait de nous et leurs besoins pour réaliser cette application web. Le premier travail qu’il m’a
confié était d’apprendre à utiliser la librairie « Leaflet » et à visualiser la carte de Nice en utilisant
« Leaflet ». « Leaflet » est une bibliothèque JavaScript libre de cartographie en ligne qui peut être
utilisée avec de nombreux plugins et qui a des APIs faciles à utiliser et bien documentées.
D’après la documentation sur le site de Leaflet, nous avons donc réalisé la carte de Nice sur
l’interface web avec le centre de la carte de coordonnées :
[43.69315081744552, 7.245756233588564]
A part l’affichage en vue normale de la carte, nous avons également proposé l’option de l’affichage
en vue satellite dans le menu en haut à gauche. Les détails concernant la structure du menu vont
être expliqués dans les parties suivantes. Le fait d’avoir une vue satellite va faciliter la localisation
des capteurs quand ils vont zoomer sur la carte. En effet, c’est essentiel de connaitre les positions
précises des capteurs quand nous analysons les données DAS, pour savoir à quelle position
correspond le signal capturé. Avec la vue satellite, nous avons une vision plus claire sur la
localisation des capteurs.
Ce premier travail nous a pris 3 heures pour le réaliser. Nous avons passé beaucoup de temps sur
Internet pour des recherches et sur l’appréhension de l’utilisation de Leaflet, puisque nous allions
utiliser ses APIs tout au long de projet. Leaflet est facile à utiliser et les documentations sont claires
et simples à comprendre. En outre, de nombreuses personnes l’utilisent, d’où des communautés qui
proposent des solutions aux difficultés rencontrées en utilisant Leaflet.
Après avoir visualisé la carte de Nice sur l’application web, l’étape suivante était de tracer la fibre
optique où ils récupéraient les données sur la carte.
Afin de tracer la fibre optique sur la carte, nous avions besoin de nombreuses coordonnées qui
constituent la fibre optique. Ainsi, M. FERRARI nous a donné un fichier de format GeoJSON, qui
contenait toutes les coordonnées représentant les géo localisations des points sur la fibre. GeoJSON
(géographique JSON) est un format ouvert d'encodage d'ensemble de données géospatiales simples
utilisant la norme JSON (JavaScript Object Notation). Il permet de décrire des données de type
point, ligne, chaîne de caractères, polygone. « Leaflet » prend en charge tous les types GeoJSON
ci-dessus. Le fichier GeoJSON que nous avions contenait les données de type point (les
coordonnées).
Au début, nous avons inséré directement le fichier GeoJSON dans notre script Javascript, c’est-à-
dire que le fichier se situait dans le dossier local et était lu directement par le script. Néanmoins,
M. FERRARI nous a dit que cette application devrait pouvoir être utilisée par tout le monde et être
utilisée ailleurs (les autres projets DAS). Ainsi, j’ai fait un changement dans notre code –
l’utilisateur peut importer son fichier GeoJSON sur l’application web et les coordonnées contenues
seront lues et récupérées par notre script.
J’ai donc réorganisé les données en récupérant seulement les coordonnées et les ai rangées dans un
tableau. Ensuite, j’ai utilisé le Leaflet API : « L.polyline » pour connecter tous les points et donc
former la trace de la fibre optique sur la carte. La couleur de polyligne assignée est bleu.
Une couche GeoJSON a été ajoutée sur la carte. La ligne bleue représente la trace de la fibre
optique, où l’équipe a effectué ses recherches – les routes principales de Nice d’une longueur 20km.
Elle part de la mairie de Nice pour se terminer au Parc Phoenix, en passant par les stations de trams,
les voies de trains et les autoroutes.
Durant cette première semaine de stage, j’ai accompli mon objectif, réaliser la page HTML
contenant la carte de Nice et la trace de fibre optique. J’ai appris à utiliser la librairie Leaflet,
qui est très efficace pour réaliser les cartes interactives. J’ai également pris connaissance du
format GeoJSON, qui m’a permis de visualiser la géo localisation de la fibre optique. En outre,
j’ai appris à utiliser Git pour travailler en même temps avec Munira, ce qui m’a énormément
aidé à organiser mon environnement de travail. Enfin, j’ai eu l’opportunité d’approfondir ma
compréhension sur le langage Javascript dans la mesure où je n’ai appris que la base de
javascript à IUT. Comme nous avons visualisé les éléments essentiels de cette application web,
l’étape suivante était de travailler sur les positions des capteurs le long de la fibre optique.
La deuxième partie de mon travail était de déduire les positions des capteurs, qui étaient
positionnés à un intervalle défini par l’utilisateur le long de la fibre optique. En utilisant le plugin
« Leaflet.GeometryUtil », j’ai pu extraire les coordonnées des capteurs. En utilisant le plugin
« Leaflet.markercluster », les capteurs ont été regroupés à chaque niveau de zoom. Grâce à cette
fonctionnalité, les capteurs sont plus visibles. Ensuite, il faut pouvoir corriger les positions des
capteurs directement sur l’interface, en raison de l’existence des bobines (fibre enroulée). Pour
calibrer les capteurs, il m’a fallu réfléchir à un algorithme qui corrige les positions en interagissant
avec l’application. Donc, après l’interprétation de ce problème, j’ai développé une méthode pour
réaliser cette étape importante. La deuxième mission m’a pris trois semaines pour l’accomplir.
La technologie DAS transforme la fibre optique en milliers de capteurs virtuels, qui sont
positionnés à un intervalle appelé « gauge » le long de la fibre optique. Tous les capteurs
correspondent à un canal et les signaux sont détectés à chaque canal. Par conséquent, il est
primordial de représenter les positions correctes des capteurs avant d’afficher les données
interceptées. M. FERRARI nous a donné le fichier « h5_to_json.html » en tant que référence pour
trouver les coordonnées des capteurs, mais il était écrit en Python.
Ce graphe avec latitude comme axe des ordonnées et longitude comme axe des abscisses montre
les capteurs qui sont placés à un intervalle de 6m.
Illustration 20 : Le code pour générer un fichier JSON contenant des coordonnées des capteurs
Pour obtenir les coordonnées des capteurs, il y a 5 étapes à implémenter et nous avons 2
informations, les coordonnées dans le fichier GeoJSON qui nous a permis de tracer la fibre et la
distance entre deux capteurs, définie par l’utilisateur.
1) Avec la fonction « accumulatedLengths », il retourne un tableau qui contient les distances
entre deux coordonnées GeoJSON.
3) Nous avons la longueur totale de la fibre, qui est la distance entre deux capteurs, nous
pouvons ainsi calculer le nombre de capteurs positionnés le long de la fibre en faisant le
calcul suivant: Longueur totale / Intervalle entre deux capteurs. Avec l’intervalle de 10m,
nous avons
capteurs.
Avant de trouver le plugin Leaflet.GeometryUtil, je ne savais pas comment obtenir les coordonnées
des capteurs le long de la fibre. Grâce à ce plugin, qui me donnait des fonctions très utiles, j’ai pu
accomplir cette tâche, sans rester longtemps bloquée. Cette tâche m’a pris 2 heures pour la réaliser.
Nous avions toutes les coordonnées des capteurs dans un fichier JSON. L’étape suivant était
l’affichage de tous les capteurs sur l’interface.
Au début, afin d’afficher tous les capteurs sur l’application web, j’ai utilisé la classe
« L.marker » pour afficher l’ensemble des marqueurs bleus. Néanmoins, avec un intervalle de
10 m entre les deux capteurs, nous avons 1875 capteurs. Par conséquent, nous voyons tous les
1875 capteurs sur l’interface en même temps, si nous ne faisons pas de zoom. Et c’est
impossible de distinguer les capteurs, car ils sont tous superposés les uns sur les autres.
L’illustration ci-dessous est un exemple que tous les capteurs sont affichés en même temps sur
l’interface, mais ce n’est pas efficace si nous voulons faire des actions sur les marqueurs. La
ligne bleu représentant la trace fibre optique n’est plus visible. J’ai également constaté que
l’application web est devenue plus lente quand tous les marqueurs sont affichés.
Afin d’assurer la fluidité de l’interface et la visualisation claire des capteurs, M. FERRARI nous a
proposé le plugin « Leaflet.markercluster », qui permet le groupement des marqueurs en fonction
du niveau de zoom (cluster) et la personnalisation des markers. Elle offre par défaut des
comportements intéressants :
Ainsi, je pouvais utiliser ce plugin pour éviter l’affichage de tous les capteurs en même temps, et
pour regrouper les marqueurs à chaque niveau de zoom.
Sur l’application web, nous pouvons choisir d’afficher les marqueurs ou pas, en cliquant sur un
bouton de radio qui s’appelle « Markers ». Ce bouton se trouve dans le sous-menu « View », où le
bouton « Satellite View » se situe. Si ce buton est activé, les marqueurs sont affichés sous la forme
cluster.
Nous voyons que les clusters affichent la plage des indexes des capteurs, par exemple : 178 – 268,
c’est-à-dire que les capteurs 178 jusqu’aux capteurs 268 sont situés dans cette aire. Pour ce faire,
j’ai modifié le code dans le fichier leaflet.markercluster.js, au lieu d’afficher le nombre des capteurs
dans ce cluster par défaut, il affiche la plage des indexes des capteurs.
Si nous cliquons sur le cluster jusqu’au zoom maximum, nous voyons les marqueurs bleus mais
plus de cluster. En cliquant sur les marqueurs, un message popup va apparaître pour nous indiquer
l’index de ce capteur, par exemple : Sensor 231.
Pour conclure, grâce au plugin « Leaflet.markercluster », j’ai pu afficher environs 1900 capteurs
(intervalle de 10m) de façon organisée et visible sur l’application web. Avec la modification
ajoutée, nous pouvons savoir exactement où se situe un capteur spécifique en regardant la plage
des indexes sur les clusters. De plus, la documentation sur GitHub était claire pour que je puisse
utiliser les fonctionnalités de ce plugin. Le temps consacré à cette étape a été 5 heures.
A partir de la troisième semaine du stage, Munira et moi, nous nous sommes réparties différentes
tâches. Je devais réaliser la calibration des capteurs et Munira devait représenter les données
d’énergie dans une fenêtre popup.
Après avoir affiché les capteurs sur l’interface, M.FERRARI m’a fait part d’un gros problème pour
la visualisation des capteurs. En effet, sur l’interface, nous voyons que les capteurs sont positionnés
le long de la route à un intervalle de 10 m. Mais, en réalité, les fibres optiques sont souvent
enroulées sous la forme d’une bobine et non en ligne droite comme sur l’interface. Les positions
des capteurs que j’ai extraites dans l’étape précédente était le long du tuyau, mais pas le long de la
fibre. Donc, les positions des capteurs que nous avions n’étaient pas correctes. Il a fallu les corriger
avec l’application web. Avant de réaliser cette application, ils ont vérifié manuellement les
positions des capteurs, basé sur les données d’énergie, et les ont corrigées un par un. Cela leur a
pris beaucoup de temps et n’a pas été efficace. C’est la raison pour laquelle que M. FERRARI m’a
demandé de réaliser la calibration des capteurs directement sur l’interface.
Ce fut la tâche la plus dure que j’ai eu à faire au cours de ce stage, parce qu’il m’a fallu réfléchir à
un algorithme fiable, afin de réaliser la calibration. Premièrement, M. FERRARI m’a donnée des
idées, avec l’application, il faut :
1) Savoir quels sont les marqueurs à glisser, mais pas tous les marqueurs.
2) Pouvoir faire glisser le marqueur de sa mauvaise position à la position correcte.
3) Repositionner tous les autres marqueurs automatiquement après avoir fait glisser un
marqueur.
4) Générer un fichier JSON contenant les coordonnées des capteurs.
Pour accomplir cette tâche, j’ai beaucoup discuté avec M. FERARRI, M. RICHARD et M. VAN
DEN ENDE. M. VAN DEN ENDE m’a suggéré d’appliquer les points de contrôle. Ce sont des
marqueurs qui peuvent être glissés et qui se situent souvent aux endroits où les véhicules s’arrêtent
(feu rouge, station de tram, arrêt de bus, intersection, …). L’idée est de pouvoir sélectionner les
points de contrôle sur l’interface et de faire glisser ces points de contrôle. Ensuite, seulement les
marqueurs autour de ce point de contrôle vont changer leurs positions automatiquement. La
démonstration ci-dessous va mieux expliquer le fonctionnement de cette calibration.
C’est un exemple de données d’énergie en série temporelle que les utilisateurs peuvent voir sur
l’application web. Les traces jaunes montrent le mouvement des véhicules sur la route, et la
discontinuité de trace signifie un arrêt des véhicules.
Ainsi, la position du 4ème capteur était fausse, car le feu rouge se situe avant le 3ème capteur. En
effet, il y a une bobine de fibre optique enroulée près du 1er capteur. Avec l’application web,
l’utilisateur avait juste besoin de faire glisser le 4ème capteur à la vraie position (au feu rouge), et
les autres capteurs autours de ce point de contrôle (2ème, 3ème, 5ème, 6ème capteur) vont être
repositionnés le long de la fibre avec la même distance entre chacun d’eux. Les points de contrôle
avant et après le 4ème capteur ne changent pas leurs positions.
Après la calibration, nous voyons que les capteurs entre le 1er et le 2ème point de contrôle sont à
moins de 10m entre eux. En revanche, les capteurs entre le 2ème et le 3ème point de contrôle sont à
plus de 10m entre eux. Mais ils sont toujours équidistants les uns des autres. Par la suite, l’utilisateur
peut continuer à sélectionner les points de contrôles et à les calibrer jusqu’à ce que toutes les
positions des capteurs soient correctes.
J’avais déjà cette idée de comment faire la calibration. Donc la première étape à faire était de
pouvoir choisir les points de contrôles et les afficher avec des icônes différentes. Dans le menu,
nous pouvons choisir le mode calibration, et quand nous sommes dans ce mode, tous les capteurs
sont affichés en même temps sur l’interface. Je n’avais pas appliqué le plugin
« Leaflet.markercluster » pour afficher les capteurs, car je n’arrivais pas à visualiser tous les
marqueurs même si le zoom est au maximum. En cliquant sur le marqueur, un message popup va
apparaître, mais il est différent de l’affichage en marker cluster.
Au début, il n’était possible que de sélectionner les points de contrôle, mais les options des raisons
n’étaient pas fournies. Pendant la réunion hebdomadaire, qui a eu lieu le mercredi, mes collègues
m’ont suggéré de mettre les propositions des raisons dans le popup et de changer les icônes, dans
la mesure où ce serait plus précis pendant la calibration. J’ai donc appliqué leur suggestion. Le
popup nous autorise à sélectionner ce capteur en tant que point de contrôle en justifiant la raison. 4
boutons radios (feu rouge, intersection, station de tram et arrêt de bus) sont fournis en tant que
raisons principales, sinon, il est possible que l’utilisateur saisisse sa raison dans le champ de texte
fourni.
Quand nous cliquons sur « Select as control point », un message d’alerte est affiché pour nous
indiquer que le capteur a été sélectionné comme point de contrôle.
En choisissant des raisons différentes, les icônes des points de contrôles changent.
(Cf. Annexe B) pour voir le code d’affichage des capteurs dans le mode calibration.
J’ai passé beaucoup de temps à réaliser la case à cocher dans le message popup, car il ne
fonctionnait pas quand je cliquais sur la case. Je n’arrivais pas à vérifier si la case était validée,
Pour résoudre ce problème, j’ai effectué des recherches sur internet afin de trouver des exemples.
Enfin, je suis arrivée à vérifier si la case a été validée avec la librairie jQuery. Le temps que j’ai
consacré pour finir le message popup a été de 2 jours. Pourtant, il y a un problème que je n’ai pas
pu résoudre – il n’y a pas de coche quand nous cliquons sur la case à cocher dans le popup :
Après la sélection des points de contrôles, je devais réfléchir à un algorithme de code qui
repositionne les capteurs affectés, en faisant glisser les points de contrôles. En effet, c’était l’ étape
la plus dure, et j’ai essayé différentes méthodes qui n’ont pas fonctionné. Pour le repositionnement
des capteurs, j’avais besoin des coordonnées de la ligne de fibre optique. Par exemple, je voulais
utiliser les coordonnées des capteurs pour repositionner les capteurs le long de la fibre, mais comme
les capteurs étaient équidistants, il y avait donc un problème.
Illustration 38 : La déformation de fibre si les coordonnées des capteurs sont utilisées dans calibration
La forme de la fibre est comme dans l’illustration 36, les deux boules jaunes représentent les deux
capteurs. Si les coordonnées des capteurs sont utilisées comme repositionnement, la fibre optique
va être déformée. Donc, pour éviter ce problème, au lieu d’utiliser les coordonnées des capteurs,
j’ai utilisé les coordonnées dans le fichier GeoJSON, mais cela a été compliqué.
▪ Difficulté 1 : Il faut s’assurer que les points de contrôles glissés se collent sur la trace de la
fibre optique, bien qu’ils ne soient pas positionnés exactement sur la trace.
▪ Difficulté 2 : Il faut trouver où se situent les points de contrôles dans le fichier GeoJSON,
pour savoir quelles sont les coordonnées qui devraient être utilisées.
Ainsi, j’ai utilisé les fonctions dans le plugin « Leaflet.GeometryUtil » pour atteindre mon objectif.
En utilisant la fonction closest, j’ai pu trouver la nouvelle coordonnée sur la ligne de fibre optique.
Ensuite, j’ai également appliqué la fonction isPointOnLine pour chercher les segments auxquels les
points de contrôles se situaient.
Segment 1 Segment 5
Illustration 39 : Démonstration de calibration
L’illustration ci-dessus est un exemple de calibration faite par le script. Les trois marqueurs rouges
sont les points de contrôles et les marqueurs bleus sont les capteurs normaux. Toutes les petites
croix représentent les coordonnées dans le fichier GeoJSON et ils ne sont pas équidistants. La
condition est : Le deuxième point de contrôle a été glissée vers le pointeur vert mais il n’est pas
positionné exactement sur la trace de fibre optique. Pour que le point de contrôle se colle sur la
trace, premièrement, il va trouver la coordonnée d’origine. Cela étant, cette coordonnée est passée
comme paramètre dans la fonction closest et cette fonction prend en paramètres de la carte, les
coordonnées GeoJSON et la coordonnée d’origine. Ensuite, il va chercher une coordonnée liée sur
la trace qui est la plus proche avec la coordonnée d’origine et va retourner cette valeur.
Normalement, cette nouvelle coordonnée est la projection orthogonale de la coordonnée d’origine
sur la trace. Nous avons donc la coordonnée qui est positionnée exactement sur la trace de fibre
optique.
Illustration 40 : Le code pour trouver la coordonnée sur la trace quand le point de contrôle est glissé
L’étape suivante était le repositionnement des capteurs affectés en utilisant cette nouvelle
coordonnée. Pour ce faire, j’ai créé la fonction :
updatePositionSensors(lat,lng,index,points,arrayControlPoints,arrayCoordinates)
qui prend comme paramètres la latitude et la longitude de la nouvelle coordonnée, ainsi que l’index
de point de contrôle glissé, les coordonnées des capteurs, les coordonnées des points de contrôles
et les coordonnées GeoJSON.
Dans ces trois conditions, la différence est le nombre d’appels de la fonction RearrangePoints.
Cette fonction prend en compte deux paramètres, soit (point de contrôle avant, point de contrôle
glissé) ou (point de contrôle glissé, point de contrôle après). 8 étapes doivent être accomplies
dans cette fonction. En prenant l’exemple de l’illustration 37 qui est la 3ème condition, il
contient deux fonctions :
Les 8 étapes sont répétées avec le point de contrôle glissé et le troisième point de contrôle. Nous
voyons que les capteurs autour du 2ème point de contrôle sont repositionnés.
La partie de l’affichage des données d’énergie a été réalisée par Munira et moi-même. Nous devions
choisir la date et la durée pour récupérer certaines données dans la base de données. La mission
concernant la base de données va être énoncée dans la partie suivante.
Si nous avons fini la calibration sur tous les capteurs ou si nous voulions arrêter la calibration, nous
pouvons télécharger un fichier JSON qui contient toutes les coordonnées des capteurs calibrés. Ce
fichier sauvegarde les points de contrôle, donc nous pouvons toujours reprendre la calibration pour
la prochaine fois, si nous n’avons pas pu la finir. L’importation de ce fichier se fait exactement
comme avant.
Bien que ce soit une mission difficile, j’ai pu l’accomplir grâce à mon tuteur et mes collègues qui
m’ont aidé et m’ont proposé des idées quand je restais bloquée. En outre, sans avoir les fonctions
fournies par le plugin « Leaflet.GeometryUtil » , je n’aurais pas pu réaliser la calibration en peu de
temps. En fait, cette tâche m’a pris plus de temps pour réfléchir que pour écrire le code, ce qui est
très intéressant et je suis heureuse d’avoir pu réussir.
Durant ces trois semaines, j’ai pu déduire les coordonnées des capteurs d’après le fichier
GeoJSON en utilisant le plugin « Leaflet.GeometryUtil ». Ensuite, j’ai affiché tous les capteurs
avec le groupement des marqueurs en fonction de zoom en utilisant le plugin
« Leaflet.markercluster ». La dernière tâche qui m’a pris plus de 2 semaines était la calibration
des capteurs en interagissant avec l’application web. J’ai surmonté les difficultés et j’ai développé
un algorithme qui fonctionne bien. Tous les mercredis, je devais présenter les tâches accomplies
et ils m’ont prodigué des conseils utiles que j’ai beaucoup appréciés. J’ai appris à utiliser les
différents librairies et plugins qui me servaient à développer mon code. En outre, j’étais de plus en
plus à l’aise avec le langage Javascript.
J’ai apporté des modifications aux différentes étapes de création du menu, qui ont été réalisées par
Munira. Je vais ici expliquer le fonctionnement du menu et les modifications que j’ai faites. Au
début, le menu n’était pas divisé en sous menus et toutes les fonctionnalités étaient groupées
ensemble. Ce qui n’était pas claire pour qu’un utilisateur qui n’avait pas de guide d’utilisation. De
plus, le menu va ainsi se développer au fur et à mesure, ce qui va permettre de bien repartir les
différentes fonctionnalités. Ainsi, M. FERRARI nous a demandé de changer la structure du menu
et de le diviser en différentes parties, afin de bien distinguer les fonctionnalités. Par conséquent, le
menu a été amélioré au cours de ce stage. La dernière version du menu se compose de quatre sous
menus et d’un bouton pour actualiser et réinitialiser la page. Le menu se situe en haut à gauche de
la page.
Ce sous menu sert à la configuration de l’application web, car c’est ici que nous devons importer
les fichiers GeoJSON et JSON pour afficher la trace de fibre optique et les capteurs sur l’application
web. C’est la première étape que l’utilisateur doit faire quand il lance cette application.
Premièrement, l’utilisateur doit choisir un fichier de format GeoJSON qui contient les coordonnées
de la fibre optique. Une fois qu’il clique sur le bouton « Import », une trace bleue va être affichée
directement sur l’interface. En outre, le nom de fichier GeoJSON importé est montré dans ce sous
menu dans la partie « Current JSON File ».
Ensuite, si c’est la première fois que l’utilisateur lance cette application et qu’il n’y a pas de fichier
contenant les coordonnées des capteurs, il peut le créer et le télécharger. Pour ce faire, il doit cliquer
sur la case « Create sensors file » et il doit choisir la distance de jauge ou l’intervalle entre deux
capteurs. En cliquant sur le bouton « Create and download », ce fichier va être téléchargé et va se
trouver dans le dossier local « Téléchargement ».
Enfin, il faut importer ce fichier JSON créé pour pouvoir afficher les capteurs positionnés à un
intervalle défini. Mais l’affichage des capteurs ne se fait pas directement en cliquant sur le bouton
« Import ». Le nom de fichier JSON importé est également affiché dans ce sous-menu dans la partie
« Current Sensor File ».
2) Calibration
Si les capteurs n’ont pas encore été calibrés, l’utilisateur doit d’abord faire la calibration afin
d’avoir les positions correctes des capteurs. Quand l’utilisateur choisit le mode calibration, tous les
capteurs sont affichés à la fois. Ensuite, nous voyons qu’il y a deux cases à cocher, « Choose date
and Time » pour choisir la date et la durée des données d’énergie que nous voulons regarder pour
faire la calibration. La case « Energy data » nous permet d’afficher les données choisies sous la
forme heatmap.
Avant d’afficher les données d’énergie, l’utilisateur doit choisir la date et la durée, puis cliquer sur
« Submit » pour que la requête soit exécutée avec la durée donnée. Par la suite, il faut cocher la
case « Energy data » pour afficher les données d’énergie de tous les capteurs.
Après avoir fini la calibration, il est possible de télécharger un fichier JSON contenant les
coordonnées des capteurs calibrés en cliquant sur le bouton « Download ». Pour importer ce fichier,
il faut revenir dans le sous menu « Setup ».
Cette partie est utilisée pour afficher les données brutes ou les données interprétées par l’équipe
avec les algorithmes IA. Quand l’utilisateur est dans le mode analyse, les capteurs ne seront pas
affichés. Ce sous menu contient quatre sections : Date and Time, Energy, Strain et Vehicle Count.
La section « Date and Time » est utilisée pour la configuration de l’affichage et les trois sections
restantes sont les différents types de données stockées dans la base de données.
La section « Date and Time » est comme dans le sous menu « Calibration », il sert à choisir la date
et la durée des données dans la base de données. En revanche, la différence est qu’il faut d’abord
choisir le « bucket » (il peut avoir plusieurs buckets qui stockent les différentes données, « bucket »
signifie le tableau qui contient les données). Ensuite, il faut choisir l’intervalle d’horodatage afin
de récupérer les données avec une durée choisie. Pour terminer, il est possible de choisir un
intervalle de capteurs pour avoir l’affichage dans certaine zone.
Si l’utilisateur veut analyser les données d’énergie, il faut aller dans la section « Energy » qui
contient trois parties : « Query Energy Data », « Display Energy » et « Time Series ». En cliquant
sur le bouton « Query Energy Data », il va chercher les données d’énergie dans la base de données
d’après la configuration faite dans la section « Date and Time ». La partie « Display Energy » nous
Nous pouvons aussi visualiser les données en mode temporelle en cliquant la section « Time
Series ». Ici, deux options sont fournies, soit les données d’énergie de tous les capteurs, soit d’un
seul capteur. Les données sont affichées dans une fenêtre popup sous la forme de graphe. Cette
partie d’affichage a été réalisée par Munira et j’ai réalisé la partie « Display Energy ».
Dans la section « Strain », l’utilisateur peut visualiser les données de pression en cochant la case
« Strain data » et les données seront affichés sous la forme graphe dans une fenêtre popup. Les
explications de sous-menu « Analysing data » seront indiqués dans la partie suivante.
4) View
Dans le sous menu « View », il contient deux cases à cocher « Satellite view » et « Markers ». Il
permet de changer la couche pour la vue satellite ou la couche pour afficher les capteurs en cluster.
À la fin, nous avons le bouton « Actualiser », qui permet de tout réinitialiser pour revenir sur le
point d’origine, c’est-à-dire tout effacer, sauf le fichier GeoJSON et le fichier JSON.
Comme indiqué dans la partie « Calibration » et « Analysing data », il faut afficher tous les
marqueurs quand le mode calibration est sélectionné et il faut cacher tous les marqueurs quand le
mode analyse est sélectionné. De plus, nous devons rester dans le même mode après avoir rafraîchi
la page (rafraîchir sans utiliser le bouton). Pour ce faire, j’ai ajouté la fonction handleClick dans les
deux boutons radios « Calibration » et « Analysing data ». Si l’un des deux boutons est cliqué, il
vérifie s’ils sont sélectionnés et il ajoute soit vrai ou faux dans le stockage de session.
La structure du menu est très importante pour créer une application web qui est facile à utiliser. Il
faut aussi être clair pour que les autres puissent ajouter d’autres fonctionnalités. C’est la raison pour
laquelle Munira et moi-même avons mis du temps à développer et à améliorer ce menu. J’ai
beaucoup réfléchi sur la structure de menu avec Munira pour pouvoir mettre en place l’ensemble
des fonctionnalités que nous avons créées sur l’interface. Nous sommes satisfaites de ce menu
réactif et flexible.
Avant d’utiliser la base de données pour accéder aux données DAS, nous avons mis en place un
fichier CSV contenant les données d’énergie pour visualiser la trace dynamique et pour réaliser les
graphes de séries temporelles. Cependant, les données dans le fichier CSV étaient très limitées et
le navigateur ne pouvait pas supporter une énorme quantité de données. Par conséquent, la
meilleure solution était de stocker tous les différents types de données dans une base de données,
et l’application web devait pouvoir accéder à cette base de données en exécutant les requêtes.
Pendant une semaine, ils ont cherché et essayé plusieurs bases de données (QuasarDB,
TimeScaleDB, …), afin de trouver la meilleure base de données pour stocker les séries temporelles.
En même temps, M. FERRARI nous a demandé de chercher comment modifier nos scripts pour
qu’ils tournent dans le serveur Node.js au lieu de tourner dans le navigateur. En effet, la plupart
des bases de données fournissent API de librairie des clients pour Node.js mais pas pour JavaScript
sur navigateur.
Pour ce faire, j’ai fait des recherches sur Internet mais c’était plus compliqué que je ne le pensais
car nous avons dizaines de fichiers (CSS, HTML, JS) qui construisent cette application web. Donc,
c’était dur de combiner tous les fichiers différents. En fait, j’ai essayé d’appliquer le Framework
« express » et d’utiliser « express.static » qui met tout le dossier en public. L’application web
fonctionnait quand je l’ai lancée en Node.js. Mais l’application web avait l’air de tourner toujours
dans le navigateur, mais pas dans Node.js. Ainsi, j’ai abandonné cette fonction après quelques jours
d’essai. Finalement, ils ont choisi la base de données « InfluxDB », qui supporte JavaScript sur le
navigateur. Elle mobilise une librairie client JavaScript pour interagir avec l’API InfluxDB dans
les navigateurs des clients frontend.
Afin de se connecter sur la base de données InfluxDB depuis JavaScript sur le navigateur, il faut
tout d’abord importer les modules à partir de la dernière distribution du navigateur de la
bibliothèque cliente.
L’étape suivante était de définir une requête avec le nom de bucket, où nous devions chercher les
données et la durée ( heure de départ et heure de fin). Comme indiqué dans la partie précédente (la
structure du menu), l’utilisateur peut choisir le bucket et la durée pour les données d’énergie, les
données de pression ou les données de comptage des véhicules. Alors, la requête contient trois
paramètres flexibles : le nom de bucket, l’heure de départ et l’heure de fin. Ici c’est un exemple de
requête pour récupérer les données de pression. Nous voyons que le filtre est défini pour récupérer
les données de type « strain ».
Par la suite, l’observateur qui allait traiter le résultat de cette requête devait être défini aussi. Il va
collecter les résultats ligne par ligne. Une fois que tous les résultats sont récupérés, ils vont être
envoyés à d’autres fonctions en tant que paramètres pour pouvoir les afficher en graphique. Ici,
toutes les lignes sont arrangées d’après l’index de capteur, car ils ne sont pas en ordre. À chaque
ligne, il récupère la valeur et le temps, puis les ranger dans un tableau avec l’index de capteur
comme le label. De plus, il récupère toutes les valeurs dans un tableau pour calculer son écart type.
Au total, il y a 5 différentes requêtes, une pour afficher les informations du bucket quand
l’utilisateur soumet un bucket. Il récupère et affiche les intervalles de temps pour les différentes
données disponibles. (Cf. Annexe E)
Les trois autres requêtes servent à récupérer les données d’énergie, les données de pression et les
données de comptage de véhicules dans le mode « Analysing data ». Une requête est utilisée pour
récupérer les données d’énergie dans le mode « Calibration ». La structure des requêtes est à peu
près pareille, ce qui est différent c’est la fonction appliquée pour utiliser ces données. Une fois les
données récupérées, un message d’alerte va être affiché.
Dans le mode « Analysing data », nous pouvons visualiser les données spatialement et
temporellement sur l’application web. Comme indiqué dans la partie précédente, toutes les données
sont récupérées de la base de données à chaque fois que nous faisons une action. Pour réaliser cette
mission, Munira et moi avons travaillé ensemble la plupart du temps, mais l’affichage de graphique
en utilisant Plotly dans une fenêtre popup a été réalisé par Munira. Pour ma part, je travaillais plutôt
sur l’affichage spatial et l’adaptation de code avec la base de données. Comme la section « Energy »
et la section « Vehicle Count » se ressemblent, je résous ici la réalisation de la partie « Display
Energy », qui sert à montrer les données d’énergie directement sur la trace spatialement, mais je
n’explique pas la partie « Time Series » qui a été réalisé par Munira.
Disons que nous avons fait la configuration pour la récupération des données dans la partie « Date
and Time » car nous voulons analyser les données d’énergie spatialement. Après avoir cliqué sur
le bouton « Query Energy Data » qui va exécuter la requête, nous allons dans la section « Display
Energy », et ensuite nous cliquons sur le bouton radio « Dynamique ». Nous voyons l’intervalle
des capteurs que nous avons choisi dans la section « Date and Time ». Ici, nous avons choisi tous
les capteurs donc 1 – 1875. En cliquant sur le bouton « Submit », les données d’énergie seront
affichées sur la trace de fibre optique de façon dynamique, nous voyons un mouvement de la trace
en changeant les couleurs à chaque instant. Plus précisément, les couleurs correspondent à
l’intensité d’énergie sur chaque capteur, et en faisant une boucle pour montrer les données à chaque
instant, nous voyons un mouvement des couleurs sur la trace.
Pour ce faire, j’ai appliqué le plugin « Leaflet.hotline », un plugin pour dessiner des dégradés
colorés le long des polylignes. Ceci est utile pour visualiser les valeurs le long d'un parcours par
exemple, l' altitude et la vitesse. Donc, notre cas est l’intensité d’énergie. J’ai utilisé la fonction «
L.hotline » qui prend en paramètre un tableau des coordonnées (latitude, longitude) et les valeurs
d’énergies à chaque capteur. La configuration pour le dégradé de la palette est : vert – jaune –
rouge. De plus, la valeur minimale attendue est 0 et la valeur maximale attendue est 3, car les
valeurs d’énergie sont dans cet intervalle. Afin d’afficher les données en boucle, j’ai créé la fonction
animateLines() qui fait la récurrence en utilisant la fonction
window.requestAnimationFrame(animateLines).
La fonction « L.Hotline » prend comme paramètre un tableau « time » qui a la structure dans
l’illustration ci-dessous. Pour faire cette boucle, j’ai utilisé un compteur pour répéter l’animation.
Quand ce compteur a une valeur égale à la longueur de tableau « time », il remet ce compteur à 0.
Cependant, si le compteur est inférieur à la longueur de tableau, elle appelle sa fonction elle-même.
Pour arriver à visualiser la trace bleu avant le capteur 660 et après le capteur 950, j’ai créé deux
tableaux, le premier contient les coordonnées de capteur 1 à capteur 660 et le deuxième contient
les coordonnées de capteur 950 à capteur 1875. Ensuite, ces deux tableaux sont utilisés pour ajouter
deux polylignes sur la carte.
Illustration 75 : Le code pour ajouter les deux polylignes dans le mode dynamique
En cliquant sur le bouton radio « Statique », nous devons choisir un horodatage pour visualiser les
données d’énergie à un instant spécifique. Quand la requête est exécutée, il récupère les valeurs
d’énergie et aussi les temps. Dans le mode statique, il va chercher les valeurs d’énergies
correspondant à l’instant choisi puis créer un tableau contenant ces valeurs et les coordonnées.
Ensuite, j’ai utilisé « L.hotline » pour créer la couche, qui va être ajoutée sur la carte. Comme c’est
l’affichage en mode statique, il n’y a donc pas besoin de boucle. La configuration de l’affichage en
mode statique est la même que celle en mode dynamique.
Par la suite, j’ai également réalisé l’affichage spatial des donnés de comptage des véhicules dans
la partie « Display Count ». La réalisation était la même comme pour les données d’énergie –
l’affichage dynamique et statique.
La difficulté de cette mission était l’adaptation de code, car nous avons préalablement réalisé
l’affichage des données, mais avec un fichier CSV. Donc, nous avons eu des problèmes de
condition, c’est-à-dire quel type d’affichage doit être montré avec les options choisies par
l’utilisateur. Nous avons réfléchi sur la structure du code pour fixer ce problème. De plus, il n’y a
pas beaucoup de communauté publique sur l’utilisation de InfluxDB. Donc, je ne pouvais que me
baser sur la documentation fournie par InfluxDB. Cette tâche a été réalisée jusqu’à la dixième
semaine. Enfin, j’ai ajouté les commentaires dans le code pour que mes collègues ou les prochains
stagiaires puissent continuer ce projet.
Grâce à l’utilisation de la base de données, il est possible de choisir et récupérer les données
spécifiques. L’extension possible sera la récupération et l’affichage des données en temps réel. J’ai
atteint mon objectif fixé – créer une application web interactive qui visualise les résultats DAS de
façon dynamique. J’ai pris connaissance de l’application de la base de données InfluxDB avec
Javascript et de l’intégration de code avec InfluxDB. Avec le menu qui donne des options variées,
l’utilisateur peut illustrer les différents types de données afin de réaliser facilement des analyses.
L’utilisation des plugins m’a permis de faciliter ma tâche et de pouvoir réaliser ces beaux
affichages des données. En outre, j’ai également appris que la réflexion logique avant de coder est
très importante pour produire une solution efficace. Cette étape m’a pris plus de temps.
D’un point de vue plus personnel, j’ai beaucoup apprécié ce stage car j’ai approfondi mes
compétences dans le domaine du développement web en utilisant JavaScript. J’ai pu acquérir des
connaissances dans des domaines que je n’ai pas pu aborder pendant mes cours à l’IUT. De plus,
les réunions hebdomadaires m’ont permis de développer mes compétences de présentation, dans la
mesure où j’ai dû présenter l’avancement de mon travail pour que mes collègues puissent me suivre
et me prodiguer des conseils. J’ai aussi appris à travailler en équipe et à utiliser l’outil Git pour bien
répartir le travail. Ce stage très enrichissant m’a donné l’opportunité de comprendre comment une
activité de recherche fonctionne. Il m’a également permis de rencontrer des professionnels dans le
domaine des recherches. Ce que j’ai particulièrement apprécié était la réflexion pour trouver la
solution et la satisfaction après avoir eu le résultat. Cela m’a énormément motivée tout au long de
ce stage.
Actuellement, bien que cette application web fournisse des fonctionnalités variées, il reste
encore des améliorations à faire, car le projet DAS n’est pas encore terminé. La structure du menu
de l’interface pourra être plus performante pour optimiser la fluidité de l’interface. De plus, il reste
encore des possibilités dans la partie affichage des données car l’équipe travaille toujours sur
l’analyse des données DAS. Donc, il existe les données qui ne sont pas encore intégrées dans
l’application et également les autres façons de présentation des données. Ce sont les améliorations
qui pourront être faites par les futurs stagiaires.
1) AGAFONKIN, V., Leaflet [en ligne]. 18 avril 2022, [consulté le 4 avril 2022].
Disponible sur https://leafletjs.com/
4) WANG, F., Leaflet.hotline [en ligne]. 20 juillet 2015, 28 février 2017, [consulté le 11
avril 2022]. Disponible sur https://github.com/iosphere/Leaflet.hotline
6) Leaflet changing Marker color [en ligne]. 9 mai 2014, consulté le 20 avril 2022].
Disponible sur https://stackoverflow.com/questions/23567203/leaflet-changing-
marker-color
7) Download JSON object as a file from browser [en ligne]. YU, E., 1 novembre 2013,
[consulté le 27 avril 2022]. Disponible sur
https://stackoverflow.com/questions/19721439/download-json-object-as-a-file-from-
browser/30800715#30800715
9) Query with the InfluxDB JavaScript client library [en ligne]. [consulté le 16 mai
2022]. Disponible sur https://docs.influxdata.com/influxdb/cloud/api-guide/client-
libraries/nodejs/query/
SI Signal et Image
IA Intelligence Artificielle