Le modèle représente tout ce qui sera saisi en vol et par la suite extrait pour la validation et les exports.
Il comporte trois sous-ensembles :
Le réferentiel (en bleu ciel)
Le vol (en jaune)
Les conditions et paramètres d'observations (en vert)
Avant la création des vols, les référentiels doivent être renseignés. Ici on part d'une région (Region) auquelle sont liées les espèces (Species) propre à cette région. Ensuite on y associe une campagne (Campaign), puis les observateurs (Observer) liés à cette campagne, et les secteurs (Sector) géographiques liés à cette campagne. Pour finir, on associe les strates (Strate) géographiques liés au secteur et les transects (Transect) liés à chacune de ces strates.
Au début de chaque vol (Flight), les transects prévus (TransectFlight) sont associés avec pour chacun d'eux, les positions des observateurs (ObserverPosition). Des transects peuvent être ajoutés afin d'effectuer de nouvelles observations non prévues au départ.
Le parcours (Route) reste l'élément central et permettra de segmenter le vol (Flight). Chaque parcours contient les conditions d'observation associées ou non au transect prévu (TransectFlight) en fonction du type de parcours (RouteType).
Les positions des observateurs (ObserverPosition) peuvent également changées en cours de vol et seront donc également associées au parcours.
Une observation (Observation) n'est liée qu'à la position de l'observateur (Position) et garde également en référence le vol (Flight) auquel elle est associée. Pour retrouver les observations d'un parcours, on utilisera le temps (observationTime), c'est à dire, qu'un parcours contiendra toutes les observations jusqu'au temps du prochain parcours (route.beginTime <= observation.observationTime < nextRoute.beginTime). Cette modélisation a été faites pour simplifier les modifications de temps lors de la validation. Ainsi, la suppression d'une route ou son changement de temps ne provoquera aucune manipulation des observations vu qu'aucun lien physique fort n'existe dans le modèle.
Le temps est aussi la donnée clé pour la liaison avec le GPS et les enregistrements audio. Ainsi le temps au moment de l'observation (observationTime) est synchronisé avec un point du GPS (GeoPoint). Pour permettre de garder le tracé géographique de l'avion, une liste de points GPS sera enregistré pour chacun des parcours (Route). Le lien n'apparaît pas car, une nouvelle fois la liaison se fera sur le temps. D'un parcours à l'autre, il n'y aura aucune coupure, le temps de début d'un parcours (beginTime) déterminera la fin du précédent, on connaîtra ainsi l'ensemble des points GPS associés à chaque parcours. L'enregistrement audio de chacun des transects sera quant à lui synchronisé sur le temps de début (beginTime) du premier parcours (LEG) du transect. Il sera toujours possible grâce au temps de l'observation de caler la lecture audio pour une observation donnée.
<<entity>>
Campagne d'observations sur une région donnée. La campagne est formée d'une période, de secteurs avec ses strates et transects et des observateurs.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
code |
Code de la campagne |
String |
naturalId |
|
region |
Région sur laquelle est effectuée la campagne |
naturalId | |
|
name |
Nom de la campagne |
String |
|
|
beginDate |
Date de début de la campagne |
Date (day) |
required |
|
endDate |
Date de fin de la campagne |
Date (day) |
required |
|
localCreation |
Indique si la création de l'entité a été faites depuis l'interface de l'application (différent d'un import) |
boolean |
<<entity>>
Vol associé à une campagne. Il contient son plan de vol et plusieurs informations sur le vol, comme les observateurs embarqués, son numéro et la référence de l'avion.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
flightNumber |
Numéro du vol par rapport au système sur lequel il a été effectué. Ce numéro est incrémenté sur chaque système indépendamment. Il peut être saisie manuellement mais aucun retour sur un numéro antérieur n'est possible pour éviter les conflits sur d'autres bases permettant de centraliser les données. |
String |
naturalId |
|
systemId |
Identifiant du système sur lequel le vol est effectué |
String |
naturalId |
|
campaign |
Campagne sur laquelle est effectuée le vol |
naturalId | |
|
immatriculation |
Immatriculation de l'avion utilisé pour le vol |
String |
|
|
beginDate |
Date de début du vol. Un vol sans date de début n'a pas encore démarré |
Date (seconds) |
|
|
endDate |
Date de fin du vol. Un vol sans date de fin est en cours de saisie et ne peut pas être validé |
Date (seconds) |
|
|
comment |
Commentaires sur le vol |
String |
|
|
platformType |
Type de plate-forme en fonction du type d'avion |
required | |
|
transectFlight |
Plan de vol. Liste des transects prévus et effectués sur ce vol. Ils seront effectués si ils sont liés à une Route |
List of TransectFlight |
composite <<indexed>> |
|
observer |
Ensemble des observateurs montés à bord de l'avion |
Collection of Observer |
<<entity>>
Il s'agit d'un point géographique avec ses coordonnées latitude, longitude et le temps auquel il a été enregistré.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
recordTime |
Temps auquel a été enregistré ce point géographique |
Date (seconds) |
|
|
longitude |
Longitude géographique |
double |
|
|
latitude |
Latitude géographique |
double |
|
|
altitude |
Altitude (feet) lors de la capture |
double |
|
|
speed |
Vitesse (km/h) lors de la capture |
double |
|
|
captureDelay |
Temps passé en secondes depuis la capture réelle. Par exemple depuis un GPS, il s'agit du temps entre la capture GPS et l'enregistrement du point |
int |
|
|
flight |
Vol sur lequel est enregistré le point géographique |
required |
<<entity>>
Données d'une observation effectuée pour une position d'observateur à un temps donné.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
observationNumber |
Numéro d'observation incrémenté par rapport au vol |
int |
|
|
observationTime |
Temps auquel a été faites l'observation |
Date (seconds) |
required |
|
podSize |
Nombre d'individus de l'espèce observée |
int |
min = 1 |
|
age |
Tranche d'âge des individus observées |
String |
values = ["", "J","I","A", "M"] |
|
cue |
Code qualifiant ce qui a réellement permit de détecter les animaux |
String |
values = ["", "U","A","2", "3","4","5", "6","7","8", "9"] |
|
behaviour |
Code se rapportant au comportement qui a dominé durant l'observation |
String |
values = ["", "SW","MI", "BR","LO", "FE","FA", "SB","OT"] |
|
swimDir |
Direction de nage suivie par les animaux. Il s'agit de l'angle de gisement, 360 étant la direction suivie par l'avion |
int |
min = 0 max = 360 |
|
calves |
Nombre de jeunes estimé en fonction de la taille des adultes et du comportement |
int |
min = 0 |
|
photo |
Indique si des photos ont été prises ou non |
boolean |
|
|
comment |
Commentaires sur l'observation |
String |
|
|
valid |
Indique si l'observation a été validée ou non |
boolean |
|
|
deleted |
Indique si l'observation a été marquée comme supprimée ou non |
boolean |
|
|
flight |
Vol pendant lequel a été faites cette observation |
required | |
|
species |
Espèce observée |
required | |
|
observationStatus |
Status de l'observation utilisé lors d'un CIRCLE_BACK, sinon la valeur est NEW par défaut |
required | |
|
position |
Position de l'observateur depuis laquelle a été faites l'observation |
required |
<<enumeration>>
Status d'une observation, principalement utilisé pour différencier lors de CIRCLE_BACK les recapture d'observations.
|
Valeur |
Description |
|---|---|
|
NEW |
Nouvelle observation |
|
CIRCLE_BACK |
Observation faisant l'objet d'un CIRCLE_BACK |
|
NO_RECAPTURE |
Observation faisant l'objet d'un CIRCLE_BACK mais sans aucune recapture |
|
RECAPTURE |
Nouvelle observation qui est une recapture de celle ayant causée le CIRCLE_BACK |
<<entity>>
Observateur participant à une campagne et positionné sur le plan de vol à une position dans l'avion. Voir importer les observateurs .
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
initials |
Initiales de l'observateur. La valeur est unique par campagne. |
String |
required |
|
firstName |
Prénom de l'observateur |
String |
|
|
lastName |
Nom de famille de l'observateur |
String |
|
|
organization |
Nom de la société de l' observateur |
String |
|
|
|
Adresse email de l'observateur |
String |
|
|
localCreation |
Indique si la création de l'entité a été faites depuis l'interface de l'application (différent d'un import) |
boolean |
|
|
pilot |
Indique si cette observateur est en fait un pilote d'avion. Un pilote ne peut pas être positionné comme un observateur (gauche, droite, centre...) |
boolean |
|
|
campaign |
Campagne à laquelle est rattachée l'observateur |
required |
<<entity>>
Position pour un observateur. Cette position est d'abord définit dans le plan de vol prévisionnel puis modifiée si nécessaire sur le parcours lors de changements de conditions d'observations. D'un point de vue technique on manipulera deux entités différentes, une pour le plan de vol et une pour chaque parcours.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
observer |
Observateur |
required | |
|
position |
Position dans l'avion |
required |
<<enumeration>>
Type de plate-forme pour l'avion qui influence les positions (Position) possibles des observateurs dans l'avion. (Pour le moment seule la plate-forme SIMPLE est gérée dans l'application).
|
Valeur |
Description |
|---|---|
|
SIMPLE |
Plate-forme simple (4 observateurs) |
|
DOUBLE |
Plate-forme double (6 observateurs) |
<<enumeration>>
Position possible pour un observateur.
|
Valeur |
Description |
|---|---|
|
NAVIGATOR |
Navigateur (position centrale) label = 'C' |
|
FRONT_LEFT |
Avant gauche (position gauche sur une plate-forme simple) label = 'L' |
|
FRONT_RIGHT |
Avant droit (position droite sur une plate-forme simple) label = 'R' |
|
BACK_LEFT |
Arrière gauche (pour une plate-forme double) |
|
BACK_RIGHT |
Arrière droit (pour une plate-forme double) |
|
CO_NAVIGATOR |
Assistant navigateur |
<<entity>>
Région sur laquelle est effectuée une campagne.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
code |
Code de la région |
String |
naturalId |
|
name |
Nom de la région |
String |
|
|
latMin |
Latitude minimum de la zone géographique de la région |
double |
|
|
latMax |
Latitude maximum de la zone géographique de la région |
double |
|
|
longMin |
Longitude minimum de la zone géographique de la région |
double |
|
|
longMax |
Longitude maximum de la zone géographique de la région |
double |
<<entity>>
Segment du vol représentant un parcours. Il contient les conditions d'observations (y compris les positions d'observateurs) et permet de différencier les types de parcours (TRANSIT, LEG, CIRCLE_BACK). Il est enregistré à un temps donné pour permettre de retrouver ses observations et ses coordonnées géographiques. A chaque changement de conditions d'observations, un nouveau parcours est créé.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
beginTime |
Temps auquel a été commencé le parcours |
Date (seconds) |
required |
|
effortNumber |
Numéro d'effort (pour un LEG uniquement) incrémenté par rapport au vol |
Integer |
|
|
distance |
?? |
double |
|
|
seaState |
Code pour l'état de la mer selon l'échelle de Beaufort |
int |
min = 0 max = 5 |
|
swell |
Houle (0 pas de houle < 2 houle gênante) |
int |
min = 0 max = 2 |
|
turbidity |
Turbidité/transparence de l'eau (0 eau claire < 2 eau turbide, 9 turbidité inconnue) |
int |
values = [0,1, 2,9] |
|
cloudCover |
Couverture nuaugeuse défini par le système des octats (0 pour dégagé < 8 pour complètement couvert) |
int |
min = 0 max = 8 |
|
skyGlint |
Réflexion des nuages |
int |
min = 0 |
|
glareFrom |
Début de la zone d'éblouissement en degré (le nez de l'avion 0°) |
Integer |
min = 0 max = 360 |
|
glareTo |
Fin de la zone d'éblouissement en degré (le nez de l'avion 0°) |
Integer |
min = 0 max = 360 |
|
glareUnder |
Eblouissement sous l'avion |
boolean |
|
|
glareSeverity |
Intensité d'éblouissement (0 aucun éblouissement < 3 éblouissement fort) |
int |
min = 0 max = 3 |
|
subjectiveConditions |
Détectabilité. Estimation des observateurs en fonction des autres paramètres si les conditions sont bonnes ou non. Il s'agit de deux lettres, une pour le côté gauche et une pour le côté droit. (E excellentes, G bonnes, M moyennes et P pauvres). |
String |
regex = "$[EGMP]{2}^" |
|
unexpectedRight |
Commentaire sur les observations à droite. Généralement utilisé pour compter le nombre d'exocet ou de méduse. |
String |
|
|
unexpectedLeft |
Commentaire sur les observations à gauche. Généralement utilisé pour compter le nombre d'exocet ou de méduse. |
String |
|
|
comment |
Commentaires sur le parcours |
String |
|
|
valid |
Indique si le parcours a été validé ou non |
boolean |
|
|
deleted |
Indique si le parcours a été marque comme supprimé ou non |
boolean |
|
|
flight |
Vol auquel est rattaché ce parcours |
required | |
|
routeType |
Type de parcours |
required | |
|
transectFlight |
Transect référence sur lequel est effectué l'effort d' observation pour un parcours de type LEG |
||
|
circleBackCause |
Observation source pour un parcours de type CIRCLE_BACK |
||
|
observerPosition |
Ensemble des positions des observateurs sur ce parcours. Le premier LEG sur un transect débutera avec le prévisionnel des positions d'observateur depuis un TransectFlight Il peut y avoir une position sans observateur. Le nombre de position est conditionné par le type de plate-forme de l'avion. |
Collection of ObserverPosition |
Autres règles de validation :
Il ne peut y avoir deux parcours à la suite avec le même type pour la même heure
Il ne peut y avoir deux parcours à la suite avec le même type et les même conditions d'observations (seaState, swell, turbidity, cloudCover, skyGlint, glareFrom, glareTo, glareUnder, glareSeverity, subjectiveConditions, observerPosition)
<<enumeration>>
Type de parcours possible.
|
Valeur |
Description |
|---|---|
|
TRANSIT |
Parcours avant et après l' arrivée sur un transect |
|
LEG |
A chaque changement de conditions d'observations, un nouveau LEG est créé pour marquer l'effort d'observation. Le LEG est le seul parcours qui est lié au transect |
|
CIRCLE_BACK |
Parcours ayant pour objectif de faire demi-tour sur une observation afin de vérifier les données ou de mieux observer l' animal. L'observation est enregistrée (circleBackCause) et de nouvelles observations peuvent être enregistrées pendant ce CIRCLE_BACK (CB). Le statut de l'observation initiale peut changer en fonction des observations effectuées pendant le CIRCLE_BACK (ObservationStatus). Sinon le statut sera par défaut "NEW" pour chacune des observations. |
<<entity>>
Secteur géographique sur lequel l'effort est effectué. Voir importer les strates .
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
sectorNumber |
Numéro de secteur |
int |
naturalId |
|
campaign |
Campagne rattachée à ce secteur |
naturalId | |
|
name |
Nom du secteur |
String |
|
|
localCreation |
Indique si la création de l'entité a été faites depuis l'interface de l'application (différent d'un import) |
boolean |
<<entity>>
Espèce observée. Voir importer les espèces .
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
code |
Code de l'espèce |
String |
naturalId |
|
region |
Région rattachée à cette espèce |
naturalId | |
|
commonName |
Nom commun de l'espèce |
String |
|
|
latinName |
Nom scientifique de l'espèce |
String |
|
|
groupName |
Nom du group auquel appartient cette espèce |
String |
|
|
family |
Famille de l'espèce |
String |
|
|
type |
Type d'espèce |
String |
|
|
localCreation |
Indique si la création de l'entité a été faites depuis l'interface de l'application (différent d'un import) |
boolean |
<<entity>>
Strate géographique sur laquelle l'effort est effectué. Voir importer les strates .
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
sector |
Secteur rattachée à cette strate |
naturalId | |
|
strateType |
Type de strate |
naturalId | |
|
code |
Code de la strate. Utilisation du numéro de secteur et du code du type de strate. Ex: sectorNumber = 1, strateTypeCode = 'C' => code = "C1" |
String |
|
|
name |
Nom usuel de la strate |
String |
|
|
localCreation |
Indique si la création de l'entité a été faites depuis l'interface de l'application (différent d'un import) |
boolean |
<<enumeration>>
Type de strate possible (côtière, pente, néritique, océanique).
|
Valeur |
Description |
|---|---|
|
COAST |
Côtière. code = 'C' |
|
NERITIC |
Néritique. code = 'N' |
|
SLOPE |
Pente. code = 'P' |
|
OCEANIC |
Océanique. code = 'O' |
<<entity>>
Segment géographique sur lequel doit être effectué l'effort d'observation. Voir importer les transects .
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
name |
Nom du transect. Utilisation du code de la strate et d'un numéro incrémenté sur deux chiffres. | strate. Ex: strateCode = "C1" => name = "C1/01" ou "C1/24" |
String |
naturalId |
|
strate |
Strate sur laquelle se situe ce transect |
naturalId | |
|
length |
Longueur du transect en mètres |
Double |
|
|
startX |
Coordonnée géographique X du début du transect |
Double |
|
|
startY |
Coordonnée géographique Y du début du transect |
Double |
|
|
endX |
Coordonnée géographique X de fin du transect |
Double |
|
|
endY |
Coordonnée géographique Y de fin de transect |
Double |
|
|
localCreation |
Indique si la création de l'entité a été faites depuis l'interface de l'application (différent d'un import) |
boolean |
|
|
nbTimes |
Nombre de fois sur lequel a été effectué le transect. Ce nombre est importé et n'est utilisé comme base pour le prochain crossingNumber des TransectFlight que si il est supérieur à la plus grande valeur existante de crossingNumber pour ce transect. |
int |
|
|
graphicIndex |
Index de l'objet graphique depuis le fichier SHP importé. Il permet de faire correspondre les méta-données avec sa représentation graphique. Il s'agit en fait de l'index de la ligne de transect dans le fichier DBF importé. Cette propriété peut être vide si aucune correspondance graphique n'est disponible dans le cas d'un nouveau transect créé depuis l'application. |
Integer |
<<entity>>
Segment géographique prévu (et potentiellement réalisé) pour un vol donné. Chaque parcours de type LEG représentant un effort d'observation est obligatoirement associé à un transect du plan de vol. L'ensemble de ces segments représente un plan de vol avec une numérotation représentant l'ordre.
|
Nom |
Description |
Type |
Contraintes |
|---|---|---|---|
|
transect |
Numéro d'observation incrémenté par rapport au vol |
required | |
|
crossingNumber |
Numéro de passage sur le transect. Incrémentée depuis le nombre de fois sur le transect (nbTimes) où modifié manuellement. Dans ce cas, le nombre de fois du transect est mis à jour pour le prochain incrément |
int |
|
|
valid |
Indique si le transect a été validé ou non |
boolean |
|
|
deleted |
Indique si le transect a été marqué comme supprimé ou non |
boolean |
|
|
observerPosition |
Ensemble des positions des observateurs prévues pour ce transect. Il peut y avoir une position sans observateur. Le nombre de position est conditionné par le type de plate-forme de l'avion. |
Collection of ObserverPosition |