Coder Social home page Coder Social logo

pnecrins / followdem Goto Github PK

View Code? Open in Web Editor NEW
21.0 12.0 11.0 18.38 MB

Cartographic web application to track moving objects equipped with a GPS.

Home Page: http://bouquetins.ecrins-parcnational.fr

License: GNU General Public License v3.0

PHP 59.20% Smarty 0.13% CSS 1.59% JavaScript 38.42% HTML 0.59% Shell 0.07%
postgresql postgis leaflet gps wildlife wildlife-tracker nature national-parks bluehats

followdem's Introduction

FollowDem

Cartographic web application to track moving objects equipped with a GPS.

This application is used by the Ecrins national Park to follow ibex : http://bouquetins.ecrins-parcnational.fr

Based on Followdem-admin (https://github.com/PnEcrins/FollowDem-admin) to install before to create the PostgreSQL database, manage devices, animals and attributes. It also allows to import massive GPS data.

French version of this presentation : https://github.com/PnEcrins/FollowDem/blob/master/README-fr.rst

Technologies

  • Languages : PHP, HTML, JS, CSS
  • Database : PostgreSQL ou MySQL / PDO
  • Server : Debian ou Ubuntu
  • Carto framework : Leaflet
  • CSS framework : Bootstrap
  • Template : Bootleaf
  • Cache and template management : Smarty
  • Base maps : Geoportail, OpenStreetMap, Google Maps, WMS

Presentation

General principles :

This application allows to track position of several objects (animals, bus...) equipped with a GPS.

Each object has an ID. They all transmit their GPS position to a satellite at regular intervals.

Then the application download these GPS positions to upload them in the MySQL database. For that, a TXT file is sent to an electronic mailbox for each object and each position.

A task (import_imap_csv in file /classes/controler/controler.class.php) is executing these steps :

  • Connecting to this mailbox and extracting the TXT files attached to emails
  • Copying these TXT files in the directory tmp/csv
  • Deleting emails once TXT files are copied on FollowDem server
  • Importing new positions of all objects (if these ones are already in the database with a common ID) in a CSV file (/csv/tracked_objects.csv)
  • Deleting the TXT temporaries TXT files once their content has been included in the CSV file
  • Importing new positions in the MySQL database from the file /csv/tracked_objects.csv
  • Emptying file /csv/tracked_objects.csv

This task can be executed manually or with a CRON launched automatically and regulary.

Other ways to fill this CSV could be considered :

  • Directly fill the CSV file (automatically or manually)
  • Import TXT files in directory tmp/csv without connecting to a mailbox

Demonstration and features

Try it at http://bouquetins.ecrins-parcnational.fr.

It includes a list of tracked objects, the map of tracked objects, a tool to select data duration.

When you click on an objects on map, click on "Voir le parcours" to show his recent travel. Then you can change duration (last 15, 30, 60, 90, 120... days).

You can also click on one position to view the day and hour, altitude and temperature.

All datas are collected in real-time and automatically from GPS positions of each ibex.

Our aim with this application was to do something very easy to use for everyone (schools, tourists, scientifics, curious...) that want to understand how ibex are moving.

We have another internal tool with more functionalities for our scientific program.

We learnt a lot with this GPS program. Here is just an example of an ibex that travelled to Italia : http://www.ecrins-parcnational.fr/actualite/un-bouquetin-des-cerces-en-italie

Scientific program explanations : http://www.ecrins-parcnational.fr/actualite/des-bouquetins-geolocalises

Installation

Documentation : http://followdem.rtfd.org (French)

Authors

Parc national des Ecrins

  • Fabien Selles
  • Thibault Romanin
  • Gil Deluermoz
  • Camille Monchicourt

Natural Solutions

Licence

  • OpenSource - GPLv3
  • Copyright (c) 2015-2020 - Parc National des Écrins

image

followdem's People

Contributors

ajambon avatar camillemonchicourt avatar cdcvidal avatar dawar2151 avatar hamoudaamine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

followdem's Issues

Refondre la BDD pour gérer l'historique des données

La BDD a été créée initialement dans l'objectif d'afficher les bouquetins équipés d'un collier en cours de fonctionnement.

L'affichage dans l'application se limite aux localisations d'un an maximum.

Ainsi il n'y avait pas d'objectif de stocker un historique des localisations, ni des bouquetins n'étant plus suivis.

Pour pouvoir centraliser et stocker l'ensemble des données il est désormais souhaité pouvoir archiver et stocker l'ensemble des localisations ainsi que l'historique des associations entre colliers et bouquetins.

Un même bouquetin pouvant avoir porté différents colliers. Un même collier pouvant avoir été posé sur plusieurs bouquetins.

Par ailleurs un travail a été commencé sur une base de données et une application permettant de saisir et gérer des observations visuelles de bouquetins marqués.

Ces données sont liées car lorsqu'un bouquetin est équipé d'un collier GPS, on lui pose en même temps un marquage auriculaire.
Cela permet de compléter les localisations GPS par les localisations visuelles et de pouvoir continuer à localiser le bouquetin visuellement une fois qu'il n'a plus de collier.

Une première application dédiée aux observations visuelles à été développée par le @PnMercantour : https://github.com/PnMercantour/app_bouquetin

Il a été envisagé de regrouper les observations visuelles et les localisations GPS dans une seule BDD.
Il a aussi été évoqué le fait d'avoir une BDD et une application générique qui puisse être utilisée pour d'autres suivis que les bouquetins.
Enfin il a été évoqué le fait de pouvoir ajouter des informations de protocoles spécifiques (reproduction, interactions, sanitaire...) en plus des localisations des animaux marqués.

Différents échanges ont eu lieu sur le sujet.

Voici un récapitulatif de ceux-ci :

2017-02 - Premier MCD

PNM :

Premier MCD pour les observations de bouquetins marqués sur https://github.com/PnMercantour/app_bouquetin

PNE :

  • Ajouter des date_creation et date_update sur la table TaggedAnimal (géré par trigger)
  • Dans la table TaggedAnimal, séparer oreille_droite et oreille_gauche, ajouter Sexe et Année de naissance. On utilise en effet ces infos pour l'appli FollowDem qui sert au portail http://bouquetins.ecrins-parcnational.fr (https://github.com/PnEcrins/FollowDem/tree/master/data)
  • Toujours dans cette table, on a une date de début (catch_date) mais il faudrait aussi une date de fin (quand le bouquetin meurt ou n'est plus suivi)

Maintenant si on part sur l'idée que cette BDD contienne aussi les localisations GPS des Bouquetins marqués, il faudrait aussi ajouter le numéro de collier de chaque bouquetin (attention un collier peut être utilisé par des bouquetins différents à des périodes différentes, et un même bouquetin peut avoir des colliers différents à des périodes différentes), un date de fin de suivi GPS (bouquetin mort, collier cassé ou défaillant...).

Et ajouter une table avec les localisations GPS (id_tagged_animal, dateheure, X, Y, temperature, nb_satellites, altitude).

A voir si cela doit être stocké dans une autre table ou utiliser la même table Observations avec un type (GPS ou Contact visuel).

PNE :

En complément des remarques de Camille, voici une proposition de principe (pas le temps de dessiner le modèle)

Pour une généricité maximale, donc la possibilité de suivre d'autres animaux, sans oreille par exemple ! Voir autre chose que des animaux.

On suit des dispositifs de marquage (collier GPS, boucles auriculaires, autres...) = trackeddevices

Ces dispositif sont attachés à des animaux en n-n (avec une date début et une date fin et surtout un id unique car un dispositif peut comme le dit Camille servir successivement sur plusieurs animaux) = taguedobject + cor_object_device

On localise dans le temps et dans l'espace les dispositifs de marquage (observations) devices_locations

On attache à ces localisations (observations) des informations "spécifiques" au protocole de suivi (par exemple la notion de femelle suitée, de remarques, d'autres animaux en présence, etc...). Sauf bonne idée, la généricité s'arrête ici, à cause du mot "spécifique".

Le modèle doit permettre aussi :

  • de qualifier les informations :
    validité (basée sur le pdop GPS ou autre),
    suppression (données test des colliers au bureau ou en fonction dans une voiture etc...)
    id_protocole/programme
    producteur/propriétaire des données
  • de conserver l'historique et de distinguer facilement les dispositifs actifs des non actifs
  • de séparer et d'isoler tout ce qui est spécifique à un protocole afin d'uniquement compléter le coeur du modèle : table(s) spécifique(s)

Quelques défis :

  • réussir à mixer l'automatisation du recueil des informations (GPS) avec des observations visuelles (animaux marquées)
  • automatiser la qualification des données du recueil automatisé
  • modéliser la description des dispositifs de marquage de manière générique (marquage bouquetins différent du marquage de tortues ou de grenouilles). Voir si des tables spécifiques à chaque sujet peuvent être évitées.

L'application FollowDem du PNE (https://github.com/PnEcrins/FollowDem) couvre une partie seulement de cette problématique. Mais une partie quand même :

  • Elle permet notamment le traitement automatique des données GPS et la localisation en ligne en temps réel des animaux équipés
  • Par contre elle ne permet pas vraiment de conserver l'historique des localisations, ni de gérer les observations des animaux marqués.
  • http://bouquetins.ecrins-parcnational.fr/

PNP :

Pour la gestion des données GPS, je pense qu’il serait judicieux de s’inspirer de ce qui existe, comme la BDD européenne du programme Eurodeer sur le chevreuil (il doit y avoir des milliers d’individus).

Pour faire simple, il suffit de faire une table ‘animal’ une table ‘Sensor’ et une table ‘anisensor’ qui fait correspondre les deux.

PNV :

Pour l'appli en général

Nous pensons qu'il serait bien de faire une appli générique suivi d'animaux marqués / équipés qui gère à la fois les contacts visuels ou autres (GPS, captage d'émetteurs).

La proposition de Gil d'avoir à la fois une table animal et device parait être la bonne. A voir si le contact pourrait alors avoir lieu sur le device ou sur l'animal (avec une table de relation n-n animal-observation pour pouvoir spécifier si des animaux sont vus ensembles et une table de relation device-observation qui permettra de spécifier la qualité de la réception radio/gps). En extrapolant le device aux boucles d'oreilles/autres marques, on pourrait raccrocher toutes les obs aux devices.

Pour le MCD au niveau Vanoise :

  • table animal: pour les couleurs nous avons oreille droite, oreille gauche et collier (a voir si les infos de marquage vont dans le device ou pas). Ajouter année de naissance, date de capture, date de décès, id secteur
  • Même si on reste sur une appli générique, il faudrait garder la possibilité de rattacher d'autres tables à l'observation visuelle. En Vanoise il y a le volet suivi de repro et le volet suivi sanitaire.

Pour le suivi repro, possibilité d'ajouter le statut suitée pour les femelles. En Vanoise: Certain/Probable/Possible/Absence/Absence probable/Gestante/Non gestante

Pour le suivi sanitaire des animaux: pour nous il s'agit de :

  • Etat corporel : Très maigre/maigre/Bon Etat/Embonpoint
  • Kerato : Atteint stade 1/Atteint stade 2/Atteint stade 3/Atteint stade 4/Guéri séquelles1/Guéri séquelles2/Guéri séquelles3/Attitude/Indemne
  • Dyspnée : 0/1
  • Jetage nasal : 0/1/2
  • Toux : 0/1/2

Pour les obs, possibilité de spécifier animal capturé (1ere obs), animal trouvé mort

PNP :

Je ne sais pas si ça vous sera utile, mais pour compléter, voir le document (http://www.springer.com/gp/book/9783319037424 / 21 MB) qui décrit la façon dont sont montées les bases de données GPS wildlife avec des gros stocks de données (on arrive très vite à compter en millions)… C’est comme ça qu’on a monté la nôtre à l’INRA.

Ça ne concerne que la partie GPS évidemment… effectivement on suit des colliers GPS … après avoir mis un individu à l’intérieur…

1 bémol pour le généraliser au marquage visuel: dans toutes les études, on se retrouve (par erreur évidemment) avec des individus de la même population qui ont exactement et simultanément le même marquage (même couleur de boucle à gauche et à droite par exemple et pas de collier). En général on arrive à les différencier (car par exemple pas le même âge ou pour x raisons)… et on essaie de recapturer pour corriger le tir… voir si l’entrée device le permettrait.

Exemple classique : 2 bouquetins de la même population ont des colliers GPS de couleurs différentes et chacun une boucle rouge à chaque oreille. On fait tomber les deux colliers par drop off. Ils ont le même marquage !! coup de bol : ils sont dans des sites différents. On peut quand même les différencier en attendant de changer une boucle ou de mettre un autre tag.

Je vous envoie aussi un petit brouillon que j’avais fait concernant la partie ‘obs visuelle’ et ce qui nous intéressait de mettre dans une appli (web par exemple) de saisie et d’interrogation.

Champs pour les observations de bouquetins marqués :

  • Date
  • Heure
  • Nom de l’observateur
  • Longitude
  • Latitude
  • Altitude
  • Secteur PNP
  • Commune
  • Type d’observation : visuelle/approximative
  • Nb total groupe
  • Nb cabris
  • Nb Eterlous
  • Etc…
  • N° de suivi unique
  • Nom de l’animal
  • Sexe
  • Autre infos liées à l’individu (date _capture, lieu capture etc…) -> Table individu
  • Id_Suité : 0, 1, 2, 3
  • Suité : Non Determiné, Certain, Probable, Non suitée
  • Autre

2017-03 - Deuxième MCD

PNE :

2017-03-21-mcd-bouquetins-cm

PNE :

En complément, les tables protocoles1, protocoles2, devraient être des tables filles de la table des observations.

Dans observations tu as ce qui est commun et si possible ce qui va dans la synthèse, dans les tables filles, tu as tout ce qui est spécifiques à chacun des protocoles.

La table protocoles c'est de la métadonnée qui est liée à la table des observations, elle permet de savoir dans quelle table fille trouver les données d'observation complémentaires mais il me semble qu'il ne faut rien connecter dessus.

PNM :

Proposition MCD PNM

2017-03-21-pnm-mcd_bouquetins_beta

PNE :

Quelques remarques :

  • On ne peut pas mettre la date de capture dans la table des objets car un objet peut être capturé plusieurs fois.
  • On n'aurait fait qu'une table des observations, en sortant la partie GPS

Pour le reste je pense qu'on est similaire.

2017-06 - Echanges sur le périmètre, la généricité, les champs, protocoles, questions à intégrer ou non

2017-07 - Validation du projet par GTSSC et V2 du CCTP du PNP

2017-07-mcd-pnp

Observation groupe :

  • IdObs (Numérique)
  • Date (date)
  • Heure (heure)
  • Longitude (Numérique)
  • Latitude (Numérique)
  • Espèce observée (Liste déroulante – Sélection du Taxref)
  • Nom observateur(s) (Liste déroulante)
  • Taille totale du groupe (Calculé)
  • Nombre de cabris (Numérique)
  • Nombre d’éterle/ou(Numérique)
  • Nombre de femelles (Numérique)
  • Nombre de jeunes mâles de moins de 6 ans (Numérique)
  • Nombre de mâles de plus de 6 ans (Numérique)
  • Nombre de mâles indéterminés (Numérique)
  • Nombre d’individus indéterminés (Numérique)
  • Précision de la localisation (liste déroulante – « Visuelle », « Approximative »),
  • Remarques groupe (Texte long)
  • Commune (Numerique)
  • Secteur (Texte)
  • Altitude (Numérique)
  • Interaction avec d’autres espèces (texte Long)

Observation individu marqué :

  • Nom Individu (Liste déroulante filtrée en fonction de l’espèce et de la date d’observation)
  • Code marque (Automatique),
  • Caractère suité ou non de l’individu (liste déroulante – « Non déterminé », « Certain », « Probable », « Non suité »)
  • Remarques individu marqué (Texte long)
  • Capture de l’individu (oui/non)
  • Mortalité de l’individu (oui/non)

Individus marqués :

  • Espèce (Liste déroulante – Selection du Taxref)
  • Programme (Liste déroulante)
  • Numéro unique (Automatique)
  • Marquage visuel utilisé (Texte)
  • Nom attribué à l’animal (texte)
  • Sexe (Liste déroulante – « Mâle » ou « Femelle »)
  • Date du marquage (Date)
  • Circonstances du marquage ((Liste déroulante – « Première capture » ou « Lâcher »)
  • Date de naissance (Date)
  • Date de la mort (Date)
  • Population (Liste déroulante)
  • Sous-population (Liste déroulante)
  • Remarques (Texte long)
  • Photographie

Observateur :

  • Code observateur (auto)
  • Nom - Requis
  • Prénom - Requis
  • Structure - Requis
  • Qualité

Espèce :

  • CD_Nom (Numérique)
  • Nom Scientifique (Texte)
  • Nom Vernaculaire (Texte)

2017-09 - Discussion avec PNP pour rendre le MCD plus générique

2017-09-25-pnp-modele marques proposition

Changement de période de suivi pour un objet traqué

Impossible de changer la période du suivi pour une durée de 3 jours.
Le bug vient du fait que l’on ne peut pas voir le parcours du bouquetin sur un délai supérieur à la dernière donnée.
Il faut afficher un message d’erreur du type : "pas de données pour la période choisie".

Traitement import CSV et TXT ...

plusieurs façon à documenter :

  • l'import d'un CSV respectant la forme décrite dans le config,
  • des fichiers txt ou autre attaché à un email sur une boîte spécifique. Ils sont traités selon la correspondance défini dans le config puis transformé en CSV standard de l'application et importé.

Dans les deux cas il y a une URL à appeler en CRON pour exécuter les tâches.

Be able to load and display from ARGOS satellites.

Example from http://www.conserveturtles.org/

They have a database that downloads the daily data directly from the Argos servers. Then they push the first location of the day to our public maps.

They also get a daily emails from Argos.

Example of file received daily via email :

117623 Date : 29.10.15 09:04:15  LC : B  IQ : 08
      Lat1 : 17.658N  Lon1 :  61.853W  Lat2 : 17.658N  Lon2 :  61.853W
      Nb mes : 002  Nb mes>-120dB : 000  Best level : -124 dB
      Pass duration : 049s   NOPC : 3
      Calcul freq : 401 677220.0 Hz   Altitude :    0 m
      0.30754E+2   0.36160E+1   0.23200E+3

117623 Date : 29.10.15 10:32:21  LC : B  IQ : 08
      Lat1 : 17.668N  Lon1 :  61.859W  Lat2 : 17.668N  Lon2 :  61.859W
      Nb mes : 001  Nb mes>-120dB : 000  Best level : -127 dB
      Pass duration : 000s   NOPC : 3
      Calcul freq : 401 677233.8 Hz   Altitude :    0 m
      0.30554E+2   0.36000E+1   0.24800E+3

It would certainly require a new setting to mention which system is used and then another script to parse this kind of files to load datas in the CSV.

Rotation des logs

Sur notre serveur, le fichier logs/imports.log fait désormais 142 Mo !
Mettre en place une rotation des logs.

[admin] Améliorer pagination

Permettre de naviguer pas seulement grâce aux boutons "précédent" et "suivant" mais aussi grâce à des numéros.

Compatibilité PHP 7

L'appli a été développé en PHP5.
Il semblerait que l'application ne tourne pas en PHP7.
L'index.php renvoie des erreurs sur un serveur en PHP7.

2 fichiers en doublon ?

Il y a un fichier api.class.php dans le dossier /classes, ce fichier contient de nombreuses portions de code commentées, pourquoi ?
Il y a un fichier api.class.php dans le dossier /config, des portions de code sont similaire au fichier ci-desses.
Serait-ce un doublon ?

Hébergement sur serveur mutualisé - 500 Internal Error

Nous avons essayé d'installer l'appli sur un hébergement mutualisé basique OVH.
On a posé l'appli à la racine, créé et connecté la BDD MySQL.
On a aussi modifié les fichiers /config/config.php, /config/carto.php et /classes/controler/controler.class.php

Cependant l'appli renvoie une page blanche, vide et la console une 500 Internal Error.

@nienfba une idée ?

Fichier config/carto.php à éditer ?

Si je comprends bien, ce fichier sert à définir des fonds carto ?
Or on les gère dans le fichier /config/config.php.
Si ce fichier est utile en temps que bibliothèque de fonds utilisables (?), peut-on se dédouaner de devoir le modifier (juste la clé IGN) pour que les gens ne modifient que config/carto.php ?

Import de données

L'import de données par un fichier txt possédant la même structure que dans la config ne marche pas.
Idem pour l'import de données en ajoutant des lignes dans le fichier tracked_objects.csv.

Be able to load and display MOVEBANK datas

Movebank is a free, online database of animal tracking data hosted by the Max Planck Institute for Ornithology (Germany) : https://www.movebank.org/
They help animal tracking researchers to manage, share, protect, analyze, and archive their data. Movebank is an international project with over four thousand users, including people from research and conservation groups around the world.

The animal tracking data accessible through Movebank belongs to researchers all over the world. These researchers can choose to make part or all of their study information and animal tracks visible to other registered users, or to the public.

Movebank offers 2 way to access datas. They can be downloaded manually as files or loaded via an API : https://www.movebank.org/node/54

Example of map using the API : http://www.atlanticseabirds.org/mafr-maps

Règle de validation des positions

Champ status dans table (booléen pour savoir ce que l'on visualise ou pas grand public. Mais toujours garder toutes les infos dans la base).

  • Prendre que les 3D donc et partir de 4 satellites.
  • HDOP ( précision de la données ), a partir de quelle précision ?
  • altitude: si en dessous de telle altitude , quelle altitude ?
  • position: si extérieur au polygone, quel polygone?

Exemple de fichiers

Date Time TTF Lat Long SAT´s 2D/3D Alt H-DOP FOM Temp X Y
25/05/2018 06:40:00 30 59.6013867 15.1990400 9 3D 91 0.9 0 24 0 0
25/05/2018 06:50:00 30 59.6013767 15.1990300 8 3D 94 1.0 0 24 0 0
25/05/2018 07:00:00 30 59.6013717 15.1990400 8 3D 98 1.0 0 24 0 0
25/05/2018 07:10:00 30 59.6013533 15.1989917 8 3D 88 1.1 0 25 0 0

DOC INSTALL - Utiliser install.sh

La doc d'installation ne fait pas mention du script install.sh alors que celui-ci est à lancer pour un bon fonctionnement de l'application.

Doc à mettre à jour.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.