Skip to content

Commit

Permalink
Merge pull request #77 from laem/points-v2
Browse files Browse the repository at this point in the history
Points v2
  • Loading branch information
laem authored Mar 7, 2023
2 parents 7c6f44f + fdf055b commit 1748865
Show file tree
Hide file tree
Showing 12 changed files with 145 additions and 50 deletions.
2 changes: 2 additions & 0 deletions Classement.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import CityResult from './CityResult'
import Logo from './Logo'
import villesListRaw from './villesClassées'
import algorithmVersion from './algorithmVersion'
import Meta from './Meta'

export const normalizedScores = (data) => {
const million = 1000 * 1000
Expand Down Expand Up @@ -48,6 +49,7 @@ export function Classement({ cyclable }) {

return (
<>
<Meta title="Le classement des villes cyclables" />
<Logo animate cyclable={cyclable} />
<div
css={`
Expand Down
4 changes: 3 additions & 1 deletion Cyclable.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { TileLayer } from 'react-leaflet/TileLayer'
import { useParams } from 'react-router-dom'
import styled from 'styled-components'
import APIUrl from './APIUrl'
import Meta from './Meta'
import {
computeSafePercentage,
getMessages,
Expand All @@ -29,7 +30,7 @@ const MapTilerKey = '1H6fEpmHR9xGnAYjulX3'
const defaultCenter = [48.10999850495452, -1.679193852233965]

const debug = false,
clientProcessing = true
clientProcessing = false

export default () => {
const { ville } = useParams()
Expand Down Expand Up @@ -146,6 +147,7 @@ export default () => {
}
`}
>
<Meta title="Le classement des villes cyclables" />
<Header ville={ville} />
<p>{loadingMessage}</p>
{!loadingMessage && (
Expand Down
25 changes: 14 additions & 11 deletions ExplicationsCyclables.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Image from './Image.js'
import MéthodeCyclable from './MéthodeCyclable.mdx'
import ArticleImportantLink from './ArticleImportantLink.js'

# Le classement cyclable

Expand Down Expand Up @@ -29,47 +29,50 @@ Notez bien la date: le classement étant complètement automatisé, basé sur Op
Bien sûr, comme tout classement, celui-ci n’est que complémentaire de l’existant, en premier lieu du Baromètre des villes cyclables, qui chaque année s’intéresse de façon déclarative au ressenti des cyclistes. On ne sera pourtant pas étonné de voir des similarités entre les résultats de ces initiatives (Strasbourg sur le podium, Marseille dans les choux), mais aussi des divergences, car ils ne mesurent pas la même chose.


## La méthode de calcul
## 🧮 La méthode de calcul

Pour établir le classement, chaque ville est testée tous les mois par un robot qui va simuler des itinéraires et mesurer la proportion de chemin cyclable.

<MéthodeCyclable/>

Pourquoi, pourquoi pas, comment ? On vous explique de façon détaillée [la méthode de calcul des scores de cyclabilité](/explications/cyclables/méthode) sur cette page dédiée.

<ArticleImportantLink to="/explications/cyclables/méthode">Comprendre la méthode du classement</ArticleImportantLink>


## Foire aux Questions

### Qui finance ce classement ?

Le classement est financé par par le Puissant Lobby des Cyclistes. Non, c'est une blague : c'est simplement un projet personnel dont le code est entièrement ouvert. Tout le monde est bienvenu pour critiquer et surtout participer à son amélioration :).
Le classement est financé par par le Puissant Lobby des Cyclistes.

Non, c'est une blague : c'est simplement un projet personnel dont le code est entièrement ouvert. Tout le monde est bienvenu pour critiquer et surtout participer à son amélioration :).

### Pourquoi je croirais ce classement ?

Le projet est entièrement open source, chacun peut [le scruter et l’améliorer](https://github.com/laem/villes.plus/issues?q=is%3Aissue+is%3Aopen+label%3ACyclable).
Au risque de nous répéter : le projet est entièrement open source, chacun peut [le scruter et l’améliorer](https://github.com/laem/villes.plus/issues?q=is%3Aissue+is%3Aopen+label%3ACyclable).

Même si nous pensons qu'il est raisonnable de croire en notre travail, l'idée est que tout le monde peut le vérifier en toute autonomie, plutôt que de reposer sur des arguments d'autorité et des boîtes noires cachées derrières des serveurs et des intérêts douteux.
Même si nous pensons qu'il est raisonnable de croire en notre travail publié avec une méthodologie détaillée, l'idée est que tout le monde puisse le vérifier en toute autonomie, plutôt que de reposer sur des arguments d'autorité et des boîtes noires cachées derrières des serveurs et des intérêts douteux.

### Quels sont les équivalents ?

À notre connaissance, il n'y a pas d'initiatives équivalentes. Si vous en connaissez, dites-le sur [le forum](https://github.com/laem/villes.plus) !

### Le classement est biaisé, aucune ville ne peut atteindre plus de 50%

Si bien sûr ! Seulement, il ne faut pas rester en France, un pays qui n'a presque aucune considération pour les vélos : direction [Amsterdam et ses presque 80%](/cyclables/47811) !
Si bien sûr ! Seulement, il ne faut pas rester en France, un pays qui n'a que peu d'ambition (pour l'instant !) pour la pratique du vélo : direction [Amsterdam et ses presque 80%](/cyclables/47811) !

### C'est impossible de rendre cyclable une ville : le score de 100% est impossible

Si bien sûr. La solution la plus simple consiste à y interdire les voitures, et n'autoriser que les véhicules au compte-goutte : urgences, assistance, déménagement, certains professionnels, etc.

Même en gardant le droit de circuler sans attestation en voiture, il est possible de faire des voies cyclables séparées partout c'est assez large, et de donner la priorité aux cyclistes sur le reste des routes.
Mais que le conservateur ou le réaliste en vous se rassure : même en gardant le droit de circuler sans attestation en voiture, il est possible de faire des voies cyclables séparées partout où c'est assez large, et de donner la priorité aux cyclistes sur le reste des routes.

Donc si, le score de 100% est possible. Il faut juste le vouloir, politiquement. Il [suffit d'écrire une loi](https://kont.me/ville-loi-2024) et l'appliquer.

### En ville OK, mais dans la campagne, on peut pas rendre tout cyclable !

Il est vrai qu'on ne maillerai que difficilement tout le territoire avec des voies cyclables, et il semble difficile d'imposer à des automobilistes de rouler derrière les vélos à 20 sur de longues lignes droites entre les champs.
Il est vrai qu'on ne maillerait que difficilement tout le territoire avec des voies cyclables, et il semble difficile d'imposer à des automobilistes de rouler derrière les vélos à 20 km/h sur de longues lignes droites entre les champs.

Pourtant, rappelez-vous que ce test ne teste qu'un pourcentage faible de tous les segments : à la campagne, vu le peu d'arrêts de bus, notre algorithme testera essentiellemen les liaisons principales entre communes.
Pourtant, rappelez-vous que ce classement ne teste qu'un pourcentage faible de tous les segments : à la campagne, vu le peu d'arrêts de bus, notre algorithme testera essentiellement les liaisons principales entre communes.

D'ailleurs, rappelons aussi que l'algorithme ne trace pas bêtement l'itinéraire le plus court entre les points : si les mairies décidaient de rendre cyclable une route (par exemple, bordant un vignoble, OKLM) en parallèle d'une autre réservée aux voitures, cela serait a priori pris en compte dans le classement. Alors, au boulot !

Expand Down
2 changes: 1 addition & 1 deletion Landing.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export default () => (
<span>🚲️</span> Le classement des métropoles{' '}
<strong>les plus cyclables</strong>
</Link>
<Link to="/pietonnes">
<Link to="/piétonnes">
<span>🚶</span>
Le classement des grandes villes <strong>les plus piétonnes</strong>
</Link>
Expand Down
33 changes: 33 additions & 0 deletions Meta.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Helmet } from 'react-helmet'
import { useLocation } from 'react-router-dom'

const websiteURL = 'https://villes.plus'

export default function Meta({ title, description, image, url, children }) {
const { pathname } = useLocation()
return (
<Helmet>
<title>{title} - Villes.plus</title>
<meta name="description" content={description} />
<meta property="og:type" content="website" />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="twitter:card" content="summary_large_image" />
{/* Attention : og:image does not accept SVG; It must be an absolute URL (https://xxx.png/jpg); */}
{image && <meta property="og:image" content={image} />}
{url && <meta property="og:url" content={url} />}
{children}
<link
rel="alternate"
hrefLang="en"
href={websiteURL + pathname + '?lang=en'}
/>
<link
rel="alternate"
hrefLang="fr"
href={websiteURL + pathname + '?lang=fr'}
/>
<link rel="alternate" hrefLang="x-default" href={websiteURL + pathname} />
</Helmet>
)
}
41 changes: 24 additions & 17 deletions MéthodeCyclable.mdx
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
Mais comment s'y prendre pour tester la cyclabilité d'une ville ? Voilà une question loin d'être simple.
Comment s'y prendre pour tester la cyclabilité d'une ville ? Il y a mille façons de le faire! Nous en avons choisi une, voici laquelle et pourquoi.

### Principe général
### Le principe général

Notre démarche est simple : simuler des trajets sur le territoire que nous voulons tester. En bref, on va créer des cyclistes virtuels, qui se déplacent d'un point A à un point B, et on va mesurer le % de km cyclables qu'ils parcourent.
Notre démarche est simple : simuler des trajets sur le territoire que nous voulons tester.

Il existerait de nombreuses approches différentes. L'une des plus évidentes serait de tester "dans l'absolu" les km cyclables : tout compter !
> En bref, on va créer des cyclistes virtuels, qui se déplacent d'un point A à un point B, et on va mesurer le % de km cyclables qu'ils parcourent.
Seulement, tout compter pose quelques problèmes.

Pourtant, d'autres idées d'approches pourraient consister en un test "dans l'absolu" des km cyclables : tout compter !

#### Pourquoi ne pas tester toutes les routes ?

Tout compter pose quelques problèmes.

Le principal est évident : on met tous les km de voirie d'une ville à pied d'égalité. Or, il semble peu logique de pondérer autant les km de l'artère principale de la ville, et ceux d'une petite voie rurale de fond de métropole !

D'autres part, contrairement à la marche pour laquelle le trottoir a été inventé pour séparer le piéton de la dangereuse et indésirable automobile, le vélo ne dispose en France que d'une infrastructure naissante. Ainsi, tout compter dans nos villes, en prenant en compte la surface, donc la faible largeur des voies vélo par rapport à celles des voitures, donnerait des scores de cyclabilité abyssaux...

> Tout compter, c'est l'approche que nous avons prise pour le pendant piéton du classement, qui a été réalisé avant celui-ci, et au-delà de ces choix historiques, qui comporte ses particularités. En effet, même si tout dépend du contexte (il faut faire des choix), nous voyons ici davantage le vélo comme un moyen de déplacement, et la marche comme un droit à flaner.
> Tout compter, c'est l'approche que nous avons prise pour le pendant piéton du classement, qui a été réalisé le premier. Pour le classement piéton, la méthode globale en surface se défend : nous voyons ici davantage le vélo comme un moyen de déplacement, et la marche comme un droit à flaner.
Concentrons-nous donc déjà sur un objectif atteignable : que sur une sélection d'itinéraires importants dans une ville, il soit possible de circuler à vélo en toute sécurité.
Concentrons-nous donc déjà sur un objectif atteignable : viser une France où sur une sélection d'itinéraires importants dans une ville, il soit possible de circuler à vélo en toute sécurité.

### Comment choisir les points ?

Donc, nous devons choisir des points à partir desquels tracer un jeu d'itinéraires à tester.

#### Version 1 : les mairies

Expand All @@ -29,17 +35,17 @@ D'autre part, outre les communes comme Paris et ses 20 arrondissements, cette s

#### Version 2 : mairies + arrêts de bus

Pour compléter les mairies, plusieurs idées ont été soumises. Par exemple, créer une sélections de points à la main. La gare principale (mais laquelle ?), le stade de foot principal (lequel ? Quid du stad de rugby ?)... Mais quelle corvée ! Et comment être objectif ?
Pour compléter les mairies, plusieurs idées ont été soumises. Par exemple, créer une sélections de points à la main. La gare principale (mais laquelle ?), le stade de foot principal (lequel ? Quid du stad de rugby ?)... Mais quelle corvée de faire une sélection pour toutes les communes ! Et comment être objectif ?

Il serait aussi possible de sélectionner des types de points : les églises ? Dans de nombreux cas, elles sont en effet des places de vie, mais tant de nouveaux quartiers en sont dépourvues (et bonjour la laïcité). Les bibliothèques ? Pourquoi pas, mais il n'y en a pas tant que ça et comme les églises, beaucoup de quartier et communes n'en ont pas.

La densité de population ? L'INSEE publie des données à la maille précise de carrés de 200m. Mais ne se déplace-t-on que d'une carré peuplé à un carré peuplé ? Non, pas du tout : les déplacements domicile-travail se font souvent vers des zones non peuplées. Et que dire des zones touristiques comme des parcs, forêts où la densité est nulle ?
La densité de population ? L'INSEE publie des données à la maille précise de carrés de 200m. Mais ne se déplace-t-on que d'un carré peuplé à un carré peuplé ? Non, pas du tout : les déplacements domicile-travail se font souvent vers des zones non peuplées, comme des usines ou des zones d'entreprise. Et que dire des zones touristiques comme des parcs, forêts où la densité est nulle ?

Il y a pourtant un type de point qui n'a aucun de ces défauts : les arrêts de bus ! Leur localisation est a priori définie justement pour couvrir non seulement la densité de population, mais également les destinations de cette population.

> Note : nous pourrions ajouter les arrêts de métro et de tram, et leur donner une importance plus grande, car ils représentent des axes majeures d'une ville. #v3
Seulement, des arrêts de bus, il y en a trop. Comment en prendre une sélection ? Les regrouper en "clusters" ? Non, car on perdrait la représentativité. Il vaut mieux les sélectionner aléatoirement.
Seulement, des arrêts de bus, il y en a trop dans les métropoles pour nos petits serveurs 🤭. Comment en prendre une sélection ? Les regrouper en "clusters" ? Non, car on perdrait la représentativité. Il vaut mieux les sélectionner aléatoirement.

Par exemple à Paris, il y a des milliers d'arrêts de bus. En en sélectionnant 100 au hasard, on garde une certaine distribution des arrêts dans la ville qui n'est justement pas faite au hasard !

Expand All @@ -49,20 +55,22 @@ C'est rassurant : cela veut dire que la sélection aléatoire de points est a pr

D'ailleurs, c'est très intuitif : au bout de 3-4 trajets à Strasbourg, on comprendre que c'est pas Saint-Étienne : il y a des voies cyclables dignes de ce nom. À Paris, il suffit de quelques trajets pour avoir la chance de tester l'une des magnifiques voies cyclables de nouvelle génération, telle que Nation-Faidherbe.

Notons aussi que la sélection aléatoire permet de tester, dans la durée, chaque mois, d'autres itinéraires. Au final, c'est l'évolution au fil des années du score des villes, en dizaines de %, qui importera !
Notons aussi que la sélection aléatoire permet de tester, dans la durée, chaque mois, d'autres itinéraires, et donc d'éviter d'être trop sensible à un axe qui serait testé chaque mois. Au final, c'est l'évolution au fil des années du score des villes, en dizaines de %, qui importera !

> Pour en savoir plus sur la démarche de recherche sur ce sujet de la sélection des points, voir [cette page illustrée](https://github.com/laem/villes.plus/issues/64).
> Pour en savoir plus sur la démarche de recherche sur ce sujet de la sélection des points, voir [cette page illustrée](https://github.com/laem/villes.plus/issues/64) qui comporte de nombreux tests sur plusieurs villes.

### Comment tracer les itinéraires entre les points ?

Nos points sont choisis, c'est super. Mais comment simuler les trajets entre eux ?

#### Combien d'itinéraires ?

À partir de chaque point, nous traçons 4 itinéraires dans un seul sens, vers les points les plus proches à vol d'oiseau.

Nous l'avons fixé à 4. Chaque point est relié à 4 autres points de la même catégorie (mairie ou arrêt de bus).

Pourquoi 4 et pas 10 ? Parce que c'est explosif en temps de calcul ! D'autre part, 4 directions, c'est symboliquement les quatre points cardinaux, même si en pratique pour un point donné, les points les plus proches sont rarement répartis comme une boussole.
Pourquoi 4 et pas 10 ? Parce que c'est explosif en temps de calcul, encore plus que le nombre de points ! D'autre part, 4 directions, c'est symboliquement les quatre points cardinaux, même si en pratique pour un point donné, les points les plus proches sont rarement répartis comme une boussole.

#### Comment tracer l'itinéraire entre deux points ?

Expand All @@ -74,17 +82,16 @@ Pour ne pas être trop sévère avec les villes, et parce que c'est logique, nou
### Un itinéraire est-il cyclable ?


Chaque itinéraire est constitué de plusieurs segments, souvent beaucoup. Chaque segment peut être cyclable ou non.
Chaque itinéraire est constitué de plusieurs segments, souvent beaucoup. Chaque segment peut être cyclable ou non. Le score de cyclabilité sera la somme des km de segments cyclables, divisée par la somme des km totaux.

Le classement est exigeant : une piste cyclable peinte au sol qui permet à un cycliste d'être frolé par un SUV de 2 tonnes ou bloqué par un automobiliste garé en double file, n'est *pas* un segment cyclable.

Ainsi, deux types de voies sont aujourd'hui considérées cyclables :
- une voie cyclable dédiée aux vélo et uniquement aux vélos (donc pas aux voitures évidemment, et pas aux piétons non plus), séparée physiquement du reste de la voirie (par une bordure, par une différence de niveau)
- une "vélorue" ou "voie douce", dans laquelle les vélos sont prioritaires par rapport aux voitures
- une voie piétonne suffisamment large pour que les vélos et piétons cohabitent, ou un chemin piéton de quelques mètres de large mais avec un tracé vélo clairement séparé.

Pour la #v3, il est question d'ajouter également les voies vélo qui côtoyent les voies piétonnes, mais seulement si elles sont nettement séparées. Voir [cette discussion](https://github.com/laem/villes.plus/issues/62). D'après mes premiers tests, cela ne changera pas vraiment la donne, mais ça reste important !


Voilà pour les grandes lignes. En pratique, [l'algorithme exact est simple à lire](https://github.com/laem/villes.plus/blob/master/isSafePath.js), mais il demande à être familier ou s'intéresser aux tags OpenStreetMap.



6 changes: 4 additions & 2 deletions Nav.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import React from 'react'
import { Link, Outlet, ScrollRestoration } from 'react-router-dom'
import { Link, Outlet, ScrollRestoration, useLocation } from 'react-router-dom'
export function Nav({ children }) {
const location = useLocation()
const specificExplication = location.pathname
return (
<div
css={`
Expand Down Expand Up @@ -56,7 +58,7 @@ export function Nav({ children }) {
</Link>
</li>
<li>
<Link to="/explications">Explications</Link>
<Link to={`/explications${specificExplication}`}>Explications</Link>
</li>
<li>
<a
Expand Down
Loading

0 comments on commit 1748865

Please sign in to comment.