Modèle de données

Le modèle représente tout ce qui sera saisi en vol et par la suite extrait pour la validation et les exports.

Description

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.

Dictionnaire de données

Campaign

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

Region

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

Flight

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

Campaign

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

PlatformType

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

GeoPoint

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

Flight

required

Observation

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

Flight

required

species

Espèce observée

Species

required

observationStatus

Status de l'observation utilisé lors d'un CIRCLE_BACK, sinon la valeur est NEW par défaut

ObservationStatus

required

position

Position de l'observateur depuis laquelle a été faites l'observation

Position

required

ObservationStatus

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

Observer

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

email

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

Campaign

required

ObserverPosition

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

Observer

required

position

Position dans l'avion

Position

required

PlatformType

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

Position

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

Region

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

Route

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

Flight

required

routeType

Type de parcours

RouteType

required

transectFlight

Transect référence sur lequel est effectué l'effort d' observation pour un parcours de type LEG

TransectFlight

circleBackCause

Observation source pour un parcours de type CIRCLE_BACK

Observation

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)

RouteType

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

Sector

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

Campaign

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

Species

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

Region

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

Strate

<<entity>>

Strate géographique sur laquelle l'effort est effectué. Voir importer les strates .

Nom

Description

Type

Contraintes

sector

Secteur rattachée à cette strate

Sector

naturalId

strateType

Type de strate

StrateType

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

StrateType

<<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'

Transect

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

Strate

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

TransectFlight

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

Transect

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