mobility icon indicating copy to clipboard operation
mobility copied to clipboard

[US] Intégrer le calcul des opportunités de loisirs dans LeisureMotive

Open Mind-the-Cap opened this issue 3 months ago • 3 comments

En tant qu'utilisateur·ice de Mobility, je veux que les zones de loisir soient récupérées automatiquement afin de calculer les opportunités de loisirs.

Idées à l’œuvre

  • Pour l'instant les opportunités reposent sur un export manuel d'OSM, avec une requête Overpass qui prend en compte les éléments suivants : nwr["leisure"]["leisure" != "garden"]["leisure" != "swimming_pool"]["access" != "private" (tous les nœuds, les voies et les relations taguées leisure qui ne soient pas d'accès privé, et qui ne soient pas des jardins ni des piscines (car ces deux derniers ne sont pas forcément marqués privés)
  • Il faudrait tout d'abord récupérer automatiquement les données OSM, à l'aide d'Osmium et des données déjà téléchargées
  • Il faudrait ensuite trouver des coefficients qui mesurent mieux comment chaque type d'infrastructure peut attirer des personnes (avec des coefficients par m² comme pour les écoles)
  • Idéalement, pour certaines infrastructures à très forte fréquentation (ex. Bains des Pâquis à Genève), il faudrait permettre aux utilisateur·ices d'entrer manuellement des capacités

Modélisation concernée

Sujet Changements
Modes NC
Utilités NC
Coûts NC
Puits et opportunités Opportunités loisirs
Prospective NC

Livrables

Données

Tableau des opportunités par commune ?

Visualisations

NC

Visualisations intermédiaires

Visualisation intermédiaire des lieux considérés et de leur densité (éventuellement avec un lien vers Overpass)

Le développement sera réussi si...

  • [ ] Tous les tests pré-existants continuent de passer (rétro-compatibilité)
  • [ ] Le code respecte les normes de formatage
  • [ ] Le taux de couverture ne baisse pas ou marginalement
  • [ ] Les visualisations intermédiaires permettent de déboguer
  • [ ] Le temps de calcul n'est pas affecté, ou raisonnablement peu
  • [ ] Les opportunités de loisir sont récupérées automatiquement
  • [ ] La modélisation loisirs est améliorée

Retour d'expérience

Compléter cette partie une fois le développement terminé

Mind-the-Cap avatar Oct 23 '25 17:10 Mind-the-Cap

@lucas-boh est-ce que tu serais ok de travailler sur cette US ? (suggestion de @FlxPo, ça fait sens vu ton super travail sur les écoles)

Mind-the-Cap avatar Oct 23 '25 17:10 Mind-the-Cap

Commit : ca253ca3a500d033fa1fb8fde1c50fc022198391

Les données OSM leisure=* sont extraites directement via Osmium. On récupère l’ensemble des points de loisirs, et les polygones sont convertis en points pour avoir un format homogène. J'ai appliqué les filtres suivant sur les résultats :

  • exclusion systématique des zones de loisirs privées access=private.
  • Les piscines qui ne sont pas tagguées comme publiques sont retirées.
  • Les jardins sont exclus (presque en totalité privés).
  • Les tables de picnic, les cours de récréation d'école, et les loisirs taggués commons sont retirés. Selon moi ce ne sont pas des motifs de déplacement, ou du moins négligeables.

L'extraction est faite sur la France et la Suisse. Un petit aperçu de la répartition : Image

Un score de fréquentation (freq_score) est attribué à chaque type de zone de loisir, puis agrégé par zone de transport comme auparavant. Les scores de fréquentations viennent de ChatGPT avec quelques modifications de ma part, l'idée est d'avoir un template de pondération qu'on pourrait éditer. Il n'est pas encore possible de modifier le score d'un centre de loisir en particulier (comme le Bains des Pâquis à Genève @Mind-the-Cap). Les coefficients et le mapping sont dans un fichier dédié leisure_freq.py.

Quelques exemples d’ordres utilisés (plus l'ordre est élevé, plus le centre de loisir sera vu comme fréquenté) :

  • 4 : piscines publiques, centres sportifs, salles de sport, parcs d’attractions.
  • 3 : parcs, aires de jeux, stations de fitness, ports de plaisance.
  • 2 : tables de ping-pong, équitation, pêche.
  • 1 : petits espaces verts, saunas.

Je n'ai pas encore essayé de faire passer les tests vu que je crois qu'il y a de la réorganisation, lequel permet de tester si le parsing est ok ?

J'ai aussi ajouté la même fonction que pour les études pour la visualisation :

Image

lucas-boh avatar Nov 14 '25 17:11 lucas-boh

Génial ! Hyper bien expliqué, merci beaucoup @lucas-boh (superbe carte franco-suisse d'ailleurs, les couleurs c'est selon les catégories ? tu as un code pour la reproduire ?)

Tu dis que les tables de pique-nique sont retirées, mais je les vois avec un coef de 2 ici : https://github.com/mobility-team/mobility/blob/leisures/mobility/parsers/leisures_frequentation.py#L90-L91

Personnellement, je suis plutôt pour les garder, car elles sont un proxy pour les chemins de randonnées, difficiles à repérer sinon (idée néanmoins : utiliser le tag sac_scale (doc) pour ce motif spécifique)

Par ailleurs, je serai pour avoir les nombres beaucoup plus élevés pour les stades, piscines et centres de sport car la fréquentation me semble un ou deux ordres de grandeur (voire trois) à une table de ping. Preneuse de ton avis @FlxPo

Concernant les tests, à la réflexion je me dis qu'un test spécifique au parseur serait chouette !

Mind-the-Cap avatar Nov 14 '25 17:11 Mind-the-Cap