Coplano est une ébauche d'assistant de plan de circulation. En cliquant sur les flèches, on fait apparaitre (ou disparaitre) des rat runs. Cela marche uniquement sur desktop. L'idée est de facilement dessiner les plans de circulation, de visualiser les rat runs, et peut-être à terme de générer semi-automatiquement une partie des plans.
Voilà un exemple de plan de circu pour le quartier Boinod/Simplon dans le 18ème arrondissement de Paris :
Il y a deux phases :
- Une étape de préparation : configuration d'un geojson pour décrire un quartier sur cocarto.com
- Une étape d'analyse : charger le geojson dans Coplano et analyser les plans de circulation possibles
Le fichier geojson décrit les carrefours (noeuds) et les sens de circulation du quartier, simples ou doubles. Le geojson doit contenir un nuage de points et ceux-ci doivent être annotés via les propriétés ci-dessous. Pour le créer, on peut utiliser cocarto.com ou d'autres éditeurs de geojson.
Un exemple est visible ici : https://cocarto.com/fr/share/TGeknxKpH8CPTvu2
- Créer une nouvelle couche dans cocarto.com
- Ajouter les 7 colonnes listées ci-dessous
- Créer chacun des points ou "noeuds" (5-10 min)
- Remplir les 7 colonnes (30-45 min)
- Exporter le fichier geojson et l'importer dans Coplano
Type nombre entier:
id
Type booléen:
transit_node
Type texte:
local_street
local_street_double_way
(optionnel)local_street_modal_filter
(optionnel)transit_exceptions
(optionnel)transit_street
(optionnel)
Notes :
- les colonnes de type texte doivent toutes suivre le même format "21,25,26" c'est-à-dire une suite d'entiers séparés par des virgules.
- contrairement à la capture d'écran, tous les noms de colonnes doivent être définis en minuscule
Chaque noeud est identifié au moyen d'un identifiant id
, un nombre entier qui doit être unique (1, 2, 3, etc). L'id
servira ensuite à définir les sens de circulation et les axes de transits.
local_street
, local_street_double_way
et local_street_modal_filter
permettent de définir les sens de circulation dans les segments de rue locaux :
local_street
: segment à sens de circulation uniquelocal_street_double_way
: à double-senslocal_street_modal_filter
: aucun sens de circulation
transit_node
est utilisé pour définir un noeud de transit.
transit_exceptions
et transit_street
permettent de raffiner les axes de transits et les transits pertinents.
Par défaut, l'algorithme cherche tous les chemins possibles pour relier un noeud de transit à un autre noeud de transit par des segments de rue locaux.
On peut affiner cette recherche par deux moyens :
transit_exceptions
: il peut paraître peu pertinent de relier tel noeud de transit à tel noeud de transit. On peut alors définir des exceptions. Si 1 et 14 sont des noeuds de transit mais qu'on considère que les relier n'est pas pertinent et encombrerait la représentation du plan, on peut ajouter la valeur "14" dans transit_exceptions à la ligne où id vaut 1. L'algorithme ignorera les rat runs démarrant de 1 et aboutissant à 14.transit_street
: si des noeuds de transit sont des noeuds successifs d'un même boulevard, on peut considérer inutile de vouloir montrer un rat run de l'un de ces noeuds à l'autre. On peut alors relier ces noeuds entre eux par transit_street. Ces noeuds feront alors partie d'un même "axe de transit" ou transit set, et l'algorithme ne cherchera pas à relier 2 noeuds du même axe de transit. L'algorithme cherchera par contre à relier des axes de transit différents entre eux, de tel sorte qu'il passe par des noeuds locaux.
Une relation entre un noeud A et un noeud B ne peut être définie qu'une et une seule fois. Une erreur est générée si A référence B et B référence A.
En cas d'erreur, une exception s'affiche (dans la console, F12) et le chargement est interrompu.
En cliquant sur un segment, la flèche itère entre ces états :
- sens de circulation
- sens de circulation inverse
- sens de circulation double
- aucun sens de circulation
L'état initial défini dans le geojson est en , les autres états en . En s'affichent les rat runs.
A venir
Il y a beaucoup à faire et les contributions sont bienvenues. Pour lancer le code en local, on peut par exemple utiliser la commande ci-dessous puis aller sur http://localhost:8000/ :
python -m http.server
Pour faire tourner les tests, on lance :
npm test
Cela donnera un résultat tel que ci-dessous :
A noter qu'il est nécessaire d'installer Node JS pour lancer les tests. Voir https://nodejs.org/.