blog.notmyidea.org/generation-de-formulaires-geolocalises.html

242 lines
No EOL
14 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<title>
Génération de formulaires, geolocalisés&nbsp;? - Alexis Métaireau </title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://blog.notmyidea.org/theme/css/main.css?v2"
type="text/css" />
<link href="https://blog.notmyidea.org/feeds/all.atom.xml"
type="application/atom+xml"
rel="alternate"
title="Alexis Métaireau ATOM Feed" />
</head>
<body>
<div id="content">
<section id="links">
<ul>
<li>
<a class="main" href="/">Alexis Métaireau</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/journal/index.html">Journal</a>
</li>
<li>
<a class="selected"
href="https://blog.notmyidea.org/code/">Code, etc.</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/weeknotes/">Notes hebdo</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/lectures/">Lectures</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/projets.html">Projets</a>
</li>
</ul>
</section>
<header>
<h1 class="post-title">Génération de formulaires, geolocalisés&nbsp;?</h1>
<time datetime="2012-04-02T00:00:00+02:00">02 avril 2012</time>
</header>
<article>
<p>On a un plan. Un &#8220;truc de&nbsp;ouf&#8221;.</p>
<p>À plusieurs reprises, des amis m&#8217;ont demandé de leur coder la même
chose, à quelques détails près: une page web avec un formulaire qui
permettrait de soumettre des informations géographiques, lié à une carte
et des manières de filtrer&nbsp;l&#8217;information.</p>
<p>L&#8217;idée fait son bout de chemin, et je commence à penser qu&#8217;on peut même
avoir quelque chose de vraiment flexible et utile. J&#8217;ai nommé le projet
<em>carto-forms</em> pour l&#8217;instant (mais c&#8217;est uniquement un nom de&nbsp;code).</p>
<p>Pour résumer: et si on avait un moyen de construire des formulaires, un
peu comme Google forms, mais avec des informations géographiques en&nbsp;plus?</p>
<p>Si vous ne connaissez pas Google forms, il s&#8217;agit d&#8217;une interface simple
d&#8217;utilisation pour générer des formulaires et récupérer des informations
depuis ces&nbsp;derniers.</p>
<p>Google forms est un super outil mais à mon avis manque deux choses
importantes: premièrement, il s&#8217;agit d&#8217;un outil propriétaire (oui, on
peut aussi dire privateur) et il n&#8217;est donc pas possible de le hacker un
peu pour le faire devenir ce qu&#8217;on souhaite, ni l&#8217;installer sur notre
propre serveur. Deuxièmement, il ne sait pas vraiment fonctionner avec
des informations géographiques, et il n&#8217;y à pas d&#8217;autre moyen de filtrer
les informations que l&#8217;utilisation de leur système de feuilles de&nbsp;calcul.</p>
<p>Après avoir réfléchi un petit peu à ça, j&#8217;ai contacté
<a href="http://blog.mathieu-leplatre.info/">Mathieu</a> et les anciens collègues
de chez <a href="http://makina-corpus.com">Makina Corpus</a>, puisque les projets
libres à base de carto sont à même de les&nbsp;intéresser.</p>
<p>Imaginez le cas&nbsp;suivant:</p>
<ol>
<li>Dans une &#8220;mapping party&#8221;, on choisit un sujet particulier à
cartographier et on design un formulaire (liste des champs (tags) a
remplir + description + le type d&#8217;information)&nbsp;;</li>
<li>Sur place, les utilisateurs remplissent les champs du formulaire
avec ce qu&#8217;ils voient. Les champs géolocalisés peuvent être remplis
automatiquement avec la géolocalisation du téléphone&nbsp;;</li>
<li>À la fin de la journée, il est possible de voir une carte des
contributions, avec le formulaire choisi&nbsp;;</li>
<li>Un script peut importer les résultats et les publier vers&nbsp;OpenStreetMap.</li>
</ol>
<h2 id="quelques-cas-dutilisation">Quelques cas&nbsp;d&#8217;utilisation</h2>
<p>J&#8217;arrive à imaginer différents cas d&#8217;utilisation pour cet outil. Le
premier est celui que j&#8217;ai approximativement décrit plus haut: la
génération de cartes de manière collaborative, avec des filtres à
facettes. Voici un flux d&#8217;utilisation&nbsp;général:</p>
<ul>
<li>
<p>Un &#8220;administrateur&#8221; se rend sur le site web et crée un nouveau
formulaire pour l&#8217;ensemble des évènements alternatifs. Il crée les
champs&nbsp;suivants:</p>
<ul>
<li>Nom: le champ qui contient le nom de&nbsp;l&#8217;évènement.</li>
<li>Catégorie: la catégorie de l&#8217;évènement (marche, concert,
manifestation…). Il peut s&#8217;agir d&#8217;un champ à multiples&nbsp;occurrences.</li>
<li>Le lieu de l&#8217;évènement. Celui-ci peut être donné soit par une
adresse soit en sélectionnant un point sur une&nbsp;carte.</li>
<li>Date: la date de l&#8217;évènement (un &#8220;date picker&#8221; peut permettre
cela&nbsp;facilement)</li>
</ul>
<p>Chaque champ dans le formulaire a des informations sémantiques
associées (oui/non, multiple sélection, date, heure, champ géocodé,
sélection carto,&nbsp;etc.)</p>
</li>
<li>
<p>Une fois terminé, le formulaire est généré et une <span class="caps">URL</span> permet d&#8217;y
accéder. (par exemple <a href="http://forms.notmyidea.org/alternatives">http://forms.notmyidea.org/alternatives</a>).</p>
</li>
<li>
<p>Une <span class="caps">API</span> <span class="caps">REST</span> permet à d&#8217;autres applications d&#8217;accéder aux
informations et d&#8217;en ajouter / modifier de&nbsp;nouvelles.</p>
</li>
<li>
<p>Il est maintenant possible de donner l&#8217;<span class="caps">URL</span> à qui voudra en faire bon
usage. N&#8217;importe qui peut ajouter des informations. On peut
également imaginer une manière de modérer les modifications si
besoin&nbsp;est.</p>
</li>
<li>
<p>Bien sur, la dernière phase est la plus intéressante: il est
possible de filtrer les informations par lieu, catégorie ou date, le
tout soit via une <span class="caps">API</span> <span class="caps">REST</span>, soit via une jolie carte et quelques
contrôles bien placés, dans le&nbsp;navigateur.</p>
</li>
</ul>
<p>Vous avez dû remarquer que le processus de création d&#8217;un formulaire est
volontairement très simple. L&#8217;idée est que n&#8217;importe qui puisse créer
des cartes facilement, en quelques clics. Si une <span class="caps">API</span> bien pensée suit,
on peut imaginer faire de la validation coté serveur et même faire des
applications pour téléphone assez&nbsp;simplement.</p>
<p>Pour aller un peu plus loin, si on arrive à penser un format de
description pour le formulaire, il sera possible de construire les
formulaires de manière automatisée sur différentes plateformes et
également sur des clients&nbsp;génériques.</p>
<p>On imagine pas mal d&#8217;exemples pour ce projet: des points de recyclage,
les endroits accessibles (pour fauteuils roulants etc.), identification
des arbres, bons coins à champignons, recensement des espèces en voie de
disparition (l&#8217;aigle de Bonelli est actuellement suivi en utilisant une
feuille de calcul partagée !), suivi des espèces dangereuses (le frelon
asiatique par exemple), cartographier les points d&#8217;affichage
publicitaires, participation citoyenne (graffitis, nids de poule, voir
<a href="http://fixmystreet.ca">http://fixmystreet.ca</a>), geocaching, trajectoires (randonnées,
coureurs,&nbsp;cyclistes)…</p>
<p>Voici quelques exemples où ce projet pourrait être utile (la liste n&#8217;est
pas&nbsp;exhaustive):</p>
<h3 id="un-backend-sig-simple-a-utiliser">Un backend <span class="caps">SIG</span> simple à&nbsp;utiliser</h3>
<p>Disons que vous êtes développeur mobile. Vous ne voulez pas vous
encombrer avec PostGIS ou écrire du code spécifique pour récupérer et
insérer des données <span class="caps">SIG</span>! Vous avez besoin de <em>Carto-Forms</em>! Une <span class="caps">API</span>
simple vous aide à penser vos modèles et vos formulaires, et cette même
<span class="caps">API</span> vous permet d&#8217;insérer et de récupérer des données. Vous pouvez vous
concentrer sur votre application et non pas sur la manière dont les
données géographiques sont stockées et&nbsp;gérées.</p>
<p>En d&#8217;autres termes, vous faites une distinction entre le stockage des
informations et leur&nbsp;affichage.</p>
<p>Si vous êtes un développeur django, plomino, drupal etc. vous pouvez
développer un module pour &#8220;plugger&#8221; vos modèles et votre interface
utilisateur avec celle de <em>Carto-Forms</em>. De cette manière, il est
possible d&#8217;exposer les formulaires aux utilisateurs de vos backoffices.
De la même manière, il est possible d&#8217;écrire des widgets qui consomment
des données et les affichent (en utilisant par exemple une bibliothèque
javascript de&nbsp;webmapping).</p>
<h3 id="un-outil-de-visualisation">Un outil de&nbsp;visualisation</h3>
<p>Puisque les données peuvent être proposées de manière automatisée en
utilisant l&#8217;<span class="caps">API</span>, vous pouvez utiliser la page de résultat de Carto-forms
comme un outil de&nbsp;visualisation.</p>
<p>Il est possible d&#8217;explorer mon jeu de données en utilisant des filtres
sur chacun des champs. La recherche à facettes peut être une idée pour
faciliter ce filtrage. Une carte affiche le résultat. Vous avez
l&#8217;impressoin d&#8217;être en face d&#8217;un système d&#8217;aide à la décision&nbsp;!</p>
<p>Évidemment, il est possible de télécharger les données brutes (geojson,
xml). Idéalement, le mieux serait d&#8217;obtenir ces données filtrées
directement depuis une <span class="caps">API</span> Web, et un lien permet de partager la page
avec l&#8217;état des filtres et le niveau de zoom / la localisation de la&nbsp;carte.</p>
<h3 id="un-service-generique-pour-gerer-les-formulaires">Un service générique pour gérer les&nbsp;formulaires</h3>
<p>Si vous souhaitez générer un fichier de configuration (ou ce que vous
voulez, messages emails, …) vous aurez besoin d&#8217;un formulaire et d&#8217;un
template pour injecter les données proposées par les utilisateurs et
récupérer un&nbsp;résultat.</p>
<p>Un service de gestion des formulaires pourrait être utile pour créer des
formulaires de manière automatique et récupérer les données &#8220;nettoyées&#8221;
et&nbsp;&#8220;validées&#8221;.</p>
<p>On peut imaginer par exemple l&#8217;utilisation d&#8217;un système de templates
externe reposant sur <em>carto-forms</em>. Celui-ci &#8220;parserait&#8221; le contenu des
templates et pourrait le lier aux informations ajoutées par les
utilisateurs via un&nbsp;formulaire.</p>
<p>Pour ce cas particulier, il n&#8217;y a pas besoin d&#8217;informations
géographiques (<span class="caps">SIG</span>). Il s&#8217;agit quasiment du service proposé
actuellement par Google&nbsp;forms.</p>
<h2 id="ca-nexiste-pas-deja-tout-ca">Ça n&#8217;existe pas déjà tout ça&nbsp;?</h2>
<p>Bien sur, il y a Google forms, qui vous permet de faire ce genre de
choses, mais comme je l&#8217;ai précisé plus haut, il ne s&#8217;agit pas
exactement de la même&nbsp;chose.</p>
<p>Nous avons découvert <a href="https://webform.com">https://webform.com</a> qui permet de créer des
formulaires avec un système de drag&#8217;n&#8217;drop. J&#8217;adorerais reproduire
quelque chose de similaire pour l&#8217;interface utilisateur. Par contre ce
projet ne gère pas les appels via <span class="caps">API</span> et les informations de
géolocalisation&nbsp;</p>
<p>L&#8217;idée de <a href="http://thoth.io">http://thoth.io</a> est également assez sympathique: une api
très simple pour stocker et récupérer des données. En plus de ça,
<em>carto-forms</em> proposerait de la validation de données et proposerait un
support des points <span class="caps">SIG</span> (point, ligne,&nbsp;polygone).</p>
<p><a href="http://mapbox.com">http://mapbox.com</a> fait également un superbe travail autour de la
cartographie, mais ne prends pas en compte le coté auto-génération de&nbsp;formulaires…</p>
<h2 id="on-est-parti">On est parti&nbsp;?!</h2>
<p>Comme vous avez pu vous en rendre compte, il ne s&#8217;agit pas d&#8217;un problème
outrageusement complexe. On a pas mal discuté avec Mathieu, à propos de
ce qu&#8217;on souhaite faire et du comment. Il se trouve qu&#8217;on peut sûrement
s&#8217;en sortir avec une solution élégante sans trop de problèmes. Mathieu
est habitué à travailler autour des projets de <span class="caps">SIG</span> (ce qui est parfait
parce que ce n&#8217;est pas mon cas) et connaît son sujet. Une bonne
opportunité&nbsp;d&#8217;apprendre!</p>
<p>On sera tous les deux à <a href="http://rencontres.django-fr.org">Djangocong</a> le
14 et 15 Avril, et on prévoit une session de <em>tempête de cerveau</em> et un
sprint sur ce projet. Si vous êtes dans le coin et que vous souhaitez
discuter ou nous filer un coup de patte, n&#8217;hésitez&nbsp;pas!</p>
<p>On ne sait pas encore si on utilisera django ou quelque chose d&#8217;autre.
On a pensé un peu à CouchDB, son système de couchapps et geocouch, mais
rien n&#8217;est encore gravé dans le marbre ! N&#8217;hésitez pas à proposer vos
solutions ou&nbsp;suggestions.</p>
<p>Voici le document etherpad sur lequel on a travaillé jusqu&#8217;à maintenant:
<a href="http://framapad.org/carto-forms">http://framapad.org/carto-forms</a>. N&#8217;hésitez pas à l&#8217;éditer et à ajouter
vos commentaires, c&#8217;est son&nbsp;objectif!</p>
<p>Merci à <a href="http://sneakernet.fr/">Arnaud</a> pour la relecture et la
correction de quelques typos dans le texte&nbsp;:)</p>
</article>
<footer>
<a id="feed" href="/feeds/all.atom.xml">
<img alt="RSS Logo" src="/theme/rss.svg" />
</a>
</footer>
</div>
</body>
</html>