L'idée serait de faire une application Symfony pour gérer simplement des tâches de cartographie.
# Gestionnaire de tâches simple
Voici un outil pour faciliter le travail collaboratif autour d’un projet. Le
projet regroupe des tâches que les contributeurs OSM peuvent s’approprier et
traiter dans JOSM.
# Idée de départ
L'idée serait de faire une application Symfony pour gérer simplement des tâches
de cartographie.
* authentification OAuth2 sur OSM pour ne pas avoir à créer de compte
* authentification OAuth2 sur OSM pour ne pas avoir à créer de compte
* télécommande JOSM
* télécommande JOSM
@ -6,19 +15,60 @@ L'idée serait de faire une application Symfony pour gérer simplement des tâch
* carte maplibre ou leaflet synchronisée avec la liste des tâches
* carte maplibre ou leaflet synchronisée avec la liste des tâches
* possibilité de modifier les tâches en masse (actions groupées)
* possibilité de modifier les tâches en masse (actions groupées)
* stockage des données dans sqlite
* stockage des données dans sqlite
* presets dans le projet pour envoyer à JOSM (genre hashtags du message de commit, etc)
* presets dans le projet pour envoyer à JOSM (genre hashtags du message de
commit, etc)
On créé un projet (titre, description), on peut manipuler les tâches d'un
On créé un projet (titre, description), on peut manipuler les tâches d'un
projet (ajouter par import geojson, supprimer, diviser en n×n ou en surface (on en déduit n)) et pour chacune
projet (ajouter par import geojson, supprimer, diviser en n×n ou en surface (on
en déduit n)) et pour chacune
d'elle on trouve un statut historicisé (à faire, en cours, fait) pour chaque
d'elle on trouve un statut historicisé (à faire, en cours, fait) pour chaque
action (mapper, vérifier). On peut imagine que certains status lockent la tâche
action (mapper, vérifier). On peut imagine que certains status lockent la tâche
qui se délocke au bout d'un certain temps.
qui se délocke au bout d'un certain temps.
Peut-être préférer un workflow : à mapper → mappage en cours → mappage terminé à vérifier → vérification en cours → vérifié
Où les étapes *en cours* sont lockantes et reviennent au statut précédent au bout d'une journée
Peut-être préférer un workflow : à mapper → mappage en cours → mappage terminé
à vérifier → vérification en cours → vérifié
Où les étapes *en cours* sont lockantes et reviennent au statut précédent au
bout d'une journée
Un système de commentaires arborescent sur les tâches serait pas du luxe (lien
avec le statut via la date).
On peut faire des statistiques par projet sur les statuts des tâches. Et
rappeller les commentaires par ordre antéchronologique globalement sur le
projet.
En tous cas l'idéal serait de pouvoir faire tout ça via une api et de fournir
un client web en js moderne. Un client en ligne de commande serait pas du luxe
non plus.
## Mise en place technique
Il s’agit d’un petit projet Symfony (7.1.3) donc essentiellement en PHP
(développé avec la version 8.2.23) avec un peu de Javascript (utilisation du
framework Stimulus suggéré par Symfony) et de CSS (utilisation du framework
Bootstrap). Les données sont stockées dans une base SQLite localement.
Les dépendances PHP sont gérées assez classiquement par Composer. On peut donc
les récuperer avec un simple `composer install` dans la racine de
l’application.
On peut le faire tourner en local pour tester/développer grâce à l’outil en
ligne de commande [`symfony`](https://symfony.com/download) et notamment en
démarrant un serveur local : `symfony serve -d`.
L’application peut être servie par un serveur web (nginx, Apache, etc) comme
une application Symfony classique (la racine du serveur web étant dans
`/public`) pour peu qu’il interprète le PHP. Il n’y a pas de référence à des
noms de domaines donc pas de soucis pour les adresses web absolues.
La configuration de l’application se fait dans un fichier `.env.local`
(s’inspirer du `.env` fourni) dans lequel il faut essentiellement renseigner
les variables :
Un système de commentaires arborescent sur les tâches serait pas du luxe (lien avec le statut via la date).
* `APP_TIMEZONE` a priori `Europe/Paris`
* `OSM_CLIENT_ID` et `OSM_CLIENT_SECRET` à générer dans les options de son
compte OSM (onglet « application OAuth2 » avec comme URI de redirections
l’adresse web de son instance suffixée du chemin `/osm/callback` et comme
autorisation, uniquement « Lire les préférences de l’utilisateur »)
On peut faire des statistiques par projet sur les statuts des tâches. Et rappeller les commentaires par ordre antéchronologique globalement sur le projet.
En tous cas l'idéal serait de pouvoir faire tout ça via une api et de fournir un client web en js moderne. Un client en ligne de commande serait pas du luxe non plus.
@ -24,7 +23,7 @@ class CsvType extends AbstractType
'text/plain',
'text/plain',
],
],
'mimeTypesMessage'=>'Type MIME inattendu',
'mimeTypesMessage'=>'Type MIME inattendu',
])
]),
],
],
'help'=>'Fichier CSV classique (encodé en UTF8, séparé par des virgules, entouré avec des doubles guillemets, échappé avec des barres obliques et avec des retours chariots UNIX) contenant une ligne de noms de colonnes « name,description,osm,geojson,status » et enfin dans la colonne « status » la valeur « todo », « doing » ou « done ».',
'help'=>'Fichier CSV classique (encodé en UTF8, séparé par des virgules, entouré avec des doubles guillemets, échappé avec des barres obliques et avec des retours chariots UNIX) contenant une ligne de noms de colonnes « name,description,osm,geojson,status » et enfin dans la colonne « status » la valeur « todo », « doing » ou « done ».',
@ -24,7 +23,7 @@ class TaskType extends AbstractType
'label'=>'GeoJSON',
'label'=>'GeoJSON',
'required'=>false,
'required'=>false,
'help_html'=>true,
'help_html'=>true,
'help'=>'Ce qu’il faut dessinner sur la carte au format <a href="https://fr.wikipedia.org/wiki/GeoJSON" target="_blank">GeoJSON</a> et mettre à disposition à l’export sous forme de <a href="https://fr.wikipedia.org/wiki/GPX_(format_de_fichier)" target="_blank">GPX</a> pour l’import dans JOSM. Outil pratique : <a href="ttps://geojson.io/" target="_blank">geojson.io</a>.',
'help'=>'Ce qu’il faut dessiner sur la carte au format <a href="https://fr.wikipedia.org/wiki/GeoJSON" target="_blank">GeoJSON</a> et mettre à disposition à l’export sous forme de <a href="https://fr.wikipedia.org/wiki/GPX_(format_de_fichier)" target="_blank">GPX</a> pour l’import dans JOSM. Outil pratique : <a href="ttps://geojson.io/" target="_blank">geojson.io</a>.',
])
])
->add('osm',TextareaType::class,[
->add('osm',TextareaType::class,[
'label'=>'OSM',
'label'=>'OSM',
@ -33,7 +32,7 @@ class TaskType extends AbstractType
'help'=>'XML décrivant ce qu’il faut charger dans la feuille de données de JOSM (cf <a href="https://wiki.openstreetmap.org/wiki/FR:OSM_XML" target="_blank">FR:OSM XML - OpenStreetMap Wiki</a>)',
'help'=>'XML décrivant ce qu’il faut charger dans la feuille de données de JOSM (cf <a href="https://wiki.openstreetmap.org/wiki/FR:OSM_XML" target="_blank">FR:OSM XML - OpenStreetMap Wiki</a>)',