SiCen Mobile : utilisation de formulaires ODK pour alimenter notre base de données d’observations

Cette page est le résultat d’un travail mené en commun, en mars 2015 par 4 géomaticiens et informaticiens des CEN Rhône-Alpes (Rémy Clément, Guillaume Costes et Laurent Poulin) et Languedoc-Roussillon (Mathieu Bossaert)

Elle a été actualisée le 17 mai 2018.

OpenDataKit est une suite d’outils libres dédiée à la collecte de données sur terminaux mobiles Androïd.

D’une relative simplicité de mise en oeuvre, la solution permet facilement de décrire et créer des formulaires correspondant à nos besoins. Une fois les données récupérées, il est simple de les intégrer à notre base de données en place.

Nous allons donc passer en revue l’installation des outils de la suite, la définition du formulaire avec XLSForm, et la ventilation des données récoltées dans notre base de données « métier », SiCen.

Présentation générale

ODK est un générateur de formulaires Open Source pour Android. Il permet de collecter des données en mode déconnecté. Les données sont envoyées quand une connexion est disponible, ou par upload de fichiers.

Les formulaires sont créés de manière simple, en utilisant un outil dédié (ODKBuild) ou en les décrivant dans un fichier excel avec le standard XLSForm

Tous les types de données sont disponibles et disposent de « widgets » adaptés : dates, textes, nombres, booléens, geo. Tous les médias que peut créer votre appareil androïd peuvent être attachés à l’observation eux aussi : son, vidéo, photo.

Il est possible d’interroger de longs référentiels (ex. TAXREF), fournis en csv avec le formulaire.

Les outils de la suite

Build

Application en ligne qui permet la création de formulaires grâce à une interface : http://build.opendatakit.org/

XLSForm

« XLSForm est une norme de formulaires créée pour aider à simplifier la création de formulaires dans Excel ». C’est dans un tableur que nous allons décrire de manière simple la strcuture et la logique du formulaire.

Collect

C’est l’application Androïd à proprement parler : https://opendatakit.org/use/collect/

Installée depuis le dépot des applications de google, elle va se connecter au serveur « Aggregate », récupérer et proposer au téléchargement la liste des formulaires disponibles. Puis envoyer à « Aggregate » les données collectées.

Aggregate

C’est le serveur, le chef d’ochestre. Il fournit les formulaires, et consolide et diffuse les données reçues : https://opendatakit.org/use/aggregate/

Installé au sein d’un réseau interne, Aggregate peut-être associé à MySQL ou PostgreSQL. Dans notre cas, il sera asoocié à PostGIS et stockera ses données dans le schéma « odk« de notre base de données « SiCen« .

Mise en œuvre au sein de l’intranet

Installation d’aggregate

Elle peut se faire simplement en utilisant une machine virtuelle, diffusée à prix libre depuis cet été : https://gum.co/odk-aggregate-vm

Dans notre cas, nous allons procéder au déploiement d’une application java sur un serveur Tomcat.

Nous considérerons par la suite que tomcat est installé :  https://opendatakit.org/use/aggregate/tomcat-install/

 

Étapes

On télécharge « l’installeur », qui n’en est pas un : https://opendatakit.org/downloads/

Il s’agit en fait d’un exécutable qui va générer l’archive .war et le script SQL de création de la base de données (base de données, utilisateur odk et schema), conformément aux paramètres renseignés. Les tables sont créées au lancement du war et à l’ajout de nouveaux formulaires

On exécute sur le serveur de base de données les commandes SQL générées. Elles vont permettre de créer les tables et autres objets de base de données nécessaires à Aggregate pour fonctionner.

Puis on déploie l’applicatiopn depuis l’interface de tomcat-manager ou en déplaçant le war dans le dossier webapps de tomcat

Mise en œuvre du formulaire

Nous avions le projet de réaliser une application mobile complète dédiée à l’outil WEB SiCen, permettant de saisir nos observations sur un terminal Android pour les retrouver dans l’interface web de SICEN, sans intervention de l’observateur, autre que d’envoyer les données du formulaire au serveur.

Besoin simple

Il nous faut collecter des données d’observations d’espèces, localisées. Elles sont collectées dans le cadre d’une étude et selon un protocole particuliers

-> une étude, un protocole, des localités sur lesquelles on observe des espèces

Un formulaire GeoODK

→ conçu avec XLSForm

Le fichier excel décrivant le formulaire ainsi que les ressources csv nécessaires à son fonctionnement sont présents dans l’archive ci-jointe : demo_aten.zip
Trucs et astuces

    Pour éviter la demande d’ajout de groupe, lors des « repeat » : Supprimer dans le xml le jr template il est présent au début du xml dans la liste des balises champs du début
    Possibilité de cumuler la fonction quick + search dans la colonne « appearance » du fichier excel des formulaires avec la fonction quick search(…)
    Le widget date avec calendrier n’est pas adapté : mettre dans la colonne « appearance » no-calendar
    Génération des noms de formulaire automatiquement en rajoutant une colonne « instance_name » dans l’onglet « settings » du fichier excel. En utilisant un champ calculé.

Des référentiels en csv générés depuis la base de données

ODK permet désormais d’associer au formulaire de grosses listes de références dans des fichiers csv. Elles seront diffusées à ODKCollect avec le formulaire. Ce dernier les transformera en base de données locale sqlite.

La fonction search() permet de filtrer les entrées proposées, à celle contenant la chaîne de caractèressaisie par l’utilisateur. Nous utiliserons cette possibilité pour la gestion des listes de choix relatives aux :

  • taxons observés
  • observateurs et structures
  • études et protocoles

Voici une démonstration du résultat

 

Création du fond de carte

L’application permet non seulement de créer tout type d’objet mais également d’embarquer sur le terminal des fonds cartographiques en local (pas de réseau nécessaire).

Les fonds doivent être au format mbtiles. Ils peuvent être généré avec TileMill, comme décrit dans la doc de GeoODK : http://geoodk.com/mbtiles_howto.php, ou d’autres outils.

Dans notre cas, nous utiliserons MOBAC parceque nous l’utilisons déjà. Par contre, le mbtile produit par MOBAC nécessitera une petite mabnipulation :
Ouvrir le fichier avec un sqlite manager et exécuter la requête suivante :

CREATE VIEW images as SELECT ROWID, « tile_data », tile_row as « tile_id » FROM « tiles » ORDER BY ROWID

Le fichier MBTiles correspondant aux fonds cartographiques doit ensuite être placé dans un sous dossier du dossier OfflineLayers : OfflineLayersSous_Dossier_contenant_Mbtiles.

Ventilation des données dans la base «métier»

Création d’une vue qui met les données au format propre à notre table de destination (saisie.saisi_obsevration)

Voilà donc nos données envoyées au serveur Aggregate, directement visibles et modifiables dans SiCen !

Conclusion / Bilan

Améliorations récentes

→ utilisation de gros référentiels + widget cartographique

Facilité de mise en œuvre de la solution

→ appli Android + déploiement WAR / Machine virtuelle

Souplesse / facilité de création de formulaires de saisie

→ Par des collègues non géomaticien / montée en compétence rapide

Intégration aisée au SI en place dans la structure

→ En utilisant les outils standards de notre base de données (vues et triggers)

  En lien avec cet article