vendredi 21 juillet 2017

Du temporel dans le spatial ...


Un jour, après une discussion au téléphone avec un stagiaire au sujet de la construction d'une "base spatiale", mon fils qui écoutait d'une oreille indiscrète me regarde avec une grande admiration, et me demande si je vais construire une "vraie base spatiale" (on était en pleine période de matraquage suite à la sortie du dernier épisode de Star Wars ...) ;  pas toujours facile de ne pas décevoir un enfant. Alors je lui ai promis de construire non pas une simple "base spatiale" mais une "base spatio-temporelle". Plus dur sera le réveil.

Le SIG pour manipuler et représenter les données spatiales, on voit bien de quoi il s'agit. Mais qu'en est-il de l'utilisation de données temporelles ? Je présente ci-dessous quelques exemples où spatial et temporel se mélangent.
  • Tout d'abord, pour pouvoir utiliser une dimension temporelle, il faut que nos données contiennent des informations de type "date". Dans QGIS, au moment de la création d'une couche (ou simplement d'un nouveau champ) de format shape, le type date est proposé. Il permet d'enregistrer des données au format américain année-mois-jour (puis de les manipuler avec des fonctions spécifiques aux dates et aux intervalles de temps). On verra plus loin comment les afficher au format européen jour-mois-année
creation couche avec champ date
Création d'un nouveau champ de type "date"

date format américain - shp - dbf
(à noter que le séparateur standard est le trait d'union)
  • Dans une base de données de type Postgres, les champs de type "date" existent également, avec plusieurs formats d'enregistrement possibles : 
      • format "date" : même chose que précédemment ;
      • format "timestamp" : à la fois la date et l'heure + minutes + secondes (avec ou sans prise en compte du fuseau horaire) ;
      • format "time" : uniquement heure+minutes+secondes, sans la date ;
      • format "interval" : uniquement intervalle entre deux dates. 
  • On ne peut pas modifier le formatage par défaut des champs "date", qui sont donc enregistrés 'à l'américaine' : 2017-07-14 ; en revanche, on peut modifier l'affichage de ces champs, et faciliter la saisie, en modifiant l'interface des formulaire de saisie dans QGIS :
Dans les propriétés de la couche, basculer de "Edition de texte" à "Date/heure"
Puis définissez le masque personnalisé que vous souhaitez ...
... au moment de la saisie, un calendrier apparaitra, et la date s'affichera au format voulu ...

Saisir des dates sera désormais un jeu d'enfant (et imaginez l'intérêt de cette interface si vous travaillez sur une tablette de terrain !). Voyons maintenant quelques cas d'usage que permettent ces enregistrements : 
  • Les expressions de QGIS permettent d'utiliser des fonctions spécifiques aux dates. Par exemple, on peut utiliser un calcul d'intervalle entre la date d'aujourd'hui et une date enregistrée. L'expression utilisera la fonction age(date1, date2) ainsi que la fonction now() qui correspond à l'instant présent de votre machine (année-mois-jour-heure-minute-seconde). Ainsi, l'expression ci-dessous renvoie l'intervalle entre 'maintenant' et la date enregistrée dans le champ "date4", en nombre d'années :
year(age(now(), "date4"))
Pour illustrer cet exemple, imaginons que vous êtes gestionnaire d'ouvrages (par exemple des ANC) avec une obligation de visite tous les 4 ans. Vous pourrez afficher sur la carte des points de couleur différente en fonction de l'ancienneté de la dernière visite (ici, rouge pour les ouvrages non visités depuis plus de 3 ans).
Instruction pour un affichage couleur différent en fonction de l'intervalle de temps calculé



  • L'extension Time Manager permet de créer des cartes animées selon une dimension temporelle. La vidéo ci-dessous représente la localisation des structures dans lesquelles je suis intervenu depuis 2012. Une lente migration vers le Sud ...



  • Utilisation dans un code python : le langage Python* permet dans QGIS de créer des procédures automatisées, qui pourront se déclencher à diverses occasions (à l'ouverture ou à la fermeture d'un projet, ou bien lorsqu'un nouvel enregistrement est réalisé, ou bien à date fixe ...). Si l'on reprend notre exemple concernant le suivi des ouvrages, on peut imaginer une alerte qui fabrique automatiquement une liste des ouvrages à visiter de toute urgence, qui crée un document issue de cette liste, et qui l'envoi automatiquement par mail au chef de service concerné.
 * langage informatique très diffusé, et qui est utilisé dans QGIS pour la création des extensions et des fonctions personnalisées ...

Première lignes d'un code python qui automatise un message d'alerte en fonction d'un intervalle de temps

  •  En conclusion
Un SIG est un outil puissant dont la finalité n'est pas uniquement "cartographique". Si on le considère de façon large, c'est un outil de gestion des données de différents types (spatiales, mais aussi temporelles, statistiques, picturales, carnet d'adresses, etc.), qui pourra être exploité de façon très souple comme outil de suivi, d'aide à la décision, d'illustration, d'analyse, de communication, de prospection ... 

Dans l'ensemble de ces usages possibles, la composante temporelle apporte une énorme plus-value, à condition de savoir la manipuler, et d'avoir correctement conçu l'architecture de votre base de données.