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
- une vidéo de démonstration : http://si.cenlr.org/sicen_mobile_forum_tic_2015
- une documentation utilisateur réalisée par l’équipe de du CEN Rhône-Alpes