conférence à la conquête des bornes de recharge électriques

Obtenir des données ouvertes de qualité est souvent un challenge qui s'étale sur des années. Le cas des bornes de recharge pour véhicules électrique permet de mettre en lumière de nombreux aspects du travail de l'ombre des personnes qui contribuent à OpenStreetMap pour faire la mise en qualité données et faire évoluer le modèle attributaire.

https://slides.com/tykayn/irve

SOTM FR 2025 - peertube.openstreetmap.fr À la conquête des bornes de recharge électriques - peertube.openstreetmap.fr

Conférence Wololo! la conversion d'open data vers des tags OpenStreetMap

Il existe 15 façons de convertir des données géolocalisées, il en faut une 16e pour toutes les réunir! Présentation d'un outil de conversion de données ouvertes qui va révolutionner vos workflow de traitement des données. Qu'il s'agisse de préparer des données pour les placer ensuite dans OSM ou pour les sortir d'OSM, vous n'allez pas en croire vos mirettes. Cela résout tous les problèmes de l'open data.

Wololo! Convertissez l'open data vers des tags d'OpenStreetMap - peertube SOTM FR 2025 - peertube.openstreetmap.fr

Conférence être contributrice à OpenStreetMap à 6ans et le rester

Quel est le bon âge pour commencer à contribuer à OpenStreetMap? Comment contrevenir aux problèmes inhérents à tous les projets de logiciels libres du monde qui est des problèmes d'inclusivité vis-à-vis des femmes, des personnes racisées, et des gens de toutes sortes? Quelques éléments de réponse trouvés par le groupe de travail inclusivité dans cette conférence que j'ai réalisé pendant le State Of The Map de Tours en 2025.

Être contributrice à OpenStreetMap à 6 ans et le rester - peertube.openstreet… SOTM FR 2025 - peertube.openstreetmap.fr France/OSM-FR/Groupes de travail/Inclusivité - OpenStreetMap Wiki

Les boulangers du libre

Nous on aime bien les croissants, et on se demande comment on pourrait faire décroître les inégalités tout en faisant collectivement réduire les émissions de gaz à effet de serre dans le monde. Nous sommes un collectif autogéré de gens proches du libre qui avons suffisamment avancé de façon individuelle pour souhaiter faire les 80% du chemin restant face aux plus grands défis climatiques de ce siècle, la lutte contre le réchauffement climatique global.

La croissance du PIB n’est pas sacrée, elle n’est pas une mesure pertinente du bien être de la société ou même de la qualité de vie issue du travail fait par les gens d’un pays. Parlons alors de démobilité des transports, de mise en commun des biens, de redistribution des richesses, de végétalisation des alimentations, de permettre les entraides, de reprendre aux fraudes patronales, de visions pour faire face aux crises de santé, de logement, de dégradation de la qualité de vie, de renforcement des gardes fous face aux dérives sectaires et autoritaires qui n’ont de cesse de s’amplifier avec les diverses catastrophes naturelles alors que la communauté scientifique sonne l’alarme depuis des dizaines d’années et que le GIEC répète que chaque dixième de degré de réchauffement global complique les conditions de notre survie à toutes et tous à court terme.

Sobres, nous référencons ici en texte simple les diverses initiatives existantes allant dans ce but et les plus proches de l’esprit libriste, pour que chacune et chacun puisse jouer collectif et que cette initiative survive à ses créatrices et créateurs.

  • Pérenniser et vulgariser les connaissances scientifiques.
  • Dénoncer les dominations à grande échelle et l’inaction climatique.
  • Faire éducation populaire à la vie politique.
  • Mettre en pratique la sortie de la financiarisation de tout.
  • Éviter le gâchis des ressources critiques à la sortie de la dépendance aux fossiles.
  • Permettre les alternatives à la médiocrité politicienne.
  • Demandez pourquoi, dénoncez les absurdités, refusez l'intolérable.
  • Nous vous laissons inventer les autres pistes.

https://ploum.net/2023-03-30-tnt23-pourquoi.html

suivi d'écriture de livre avec book generator

Nombreux sont les gens qui écrivent des trucs, avec ou sans utiliser la disposition Ergol ou les fichiers Orgmode. La profusion de textes médiocres et sans personnalité générés par des LLM ont provoqué un enthousiasme pour les écrits organiques de la part de gens plus ou moins habitués à écrire. J'ai participé au mouvement en proposant un outil pour avoir la main sur mes blogs. Comme c'est actuellement l'Inktober et que des gens se mettent à encrer des pixels, je vous propose d'essayer ce petit générateur de livres au format Org ou Markdown fait de quelques scripts Python : https://source.cipherbliss.com/tykayn/book-generator-orgmode

Inspiré des quelques outils libres existant pour aider les écrivains à réaliser leur livres et de ce qui me reste de mes études d'art narratif j'ai composé un ensemble de scripts qui permettent de:

  • suivre les intrigues
  • définir des choses en général pour notre livre, auxquelles se reporter pour retrouver son fil directeur et le faire évoluer si besoin.
  • faire des décomptes de progression et en sortir un graphique
  • se donner des objectifs de nombres de mots par chapitre
  • définir et suivre nos personnages, leurs caractéristiques, ce qu'elles et ils veulent accomplir, leurs évolutions.
  • se noter des choses à retravailler sans que ces tâches soient dans le rendu du livre
  • avoir des rendus graphique de nos arcs narratifs, chronologiquement mais aussi selon la narration qui n'est pas souvent chronologique.
  • estimer notre temps de rédaction et le temps de lecture du livre.
  • corriger des fautes, supprimer les doubles espaces, ajouter des majuscules manquantes, corriger des caractères spéciaux comme les trois points.
  • le tout sans obliger à adopter un autre éditeur de texte que celui que l'on utilise habituellement, donc en conservant des formats textes ouverts: org et md.
  • rendre notre livre dans différents formats: epub, pdf, html.
  • générer un projet de livre avec les différents fichiers, découpés en chapitres et sous chapitres avec des tags par défaut.
  • avoir un script de mise à jour des informations automatiques à mettre en cronjob pour faire le suivi tout seul.
  • garder le tout qui fonctionne localement sur ordi, sans besoin de connection à internet.

Ce dépôt ne s'occupera pas de vos sauvegardes et gestions de versions, pour ça je vous conseille à minima d'utiliser un git add et commit fait par un cronjob pour chacun de vos dossiers de textes, et de sauvegarder ces dossiers sur plusieurs supports externes.

Tout ceci m'a permis d'aller voir des conseils de gens qui écrivent des genres variés, des récits ou des articles de blog, ou qui font du doublage. Ce qui est amusant c'est que tout le monde a ses propres conseils à donner, des exercices à proposer, des consignes qu'elles et ils disent suivre et qui changent avec le temps. Cory Doctorow par exemple conseille de se donner un nombre précis de mots par jour, et de s'arrêter à ce nombre même si on est au milieu d'une phrase, histoire de laisser son esprit le temps de penser. Ploum, que j'ai eu le plaisir de voir en dédicace dans la librairie de Bookynette à Paris, nous raconte aussi que pour écrire il utilise sa machine à penser, qui est une machine à écrire. Ce qui permet de ne pas avoir son attention dispersée par l'interface numérique. Il faut ensuite retaper au clavier les feuilles qui font partie de la sélection (ou faire de l'OCR, why not) pour envoyer à l'éditeur.

Personnellement j'essaie de temps à autre des choses, Changer le thème d'emacs pour avoir une typo qui me plaît, écouter tel ou tel genre de musique, noter des choses au crayon, dessiner des rendus visuels des intrigues, reformuler les choses dites par les personnages pour que tout le monde n'ait pas la même façon de parler, causer avec des gens pour essayer de mieux comprendre leur vision du monde. Chercher de l'inspiration dans des livres ou des lieux que je n'ai jamais fréquenté, voir des vidéos d'artistes, repenser à des situations et des lieux dans des rêves qui ne semblent pas correspondre à des lieux que j'ai visité… faire quelques session de dactylo, et se mettre à écrire. Bref, amusez vous!

https://tykayn.fr/2024/ecrire-une-histoire-et-ses-personnages-toute-une-aventure https://bosiandco.wordpress.com/2022/10/16/et-de-vingt-la-dilution-de-la-fonction-sujet/ https://www.cs.tufts.edu/~nr/cs257/archive/cory-doctorow/cory-doctorow-writing-in-age-of.html

les projets du mois sont de retour

Ces projets "du mois" permettent d'animer la communauté de gens qui contribuent à OpenStreetMap sur des sujets identifiés par les membres afin de favoriser la complétion des donneés ouvertes. Ces projets durent bien sûr plus qu'un mois et le suivi des objets se fait sur plusieurs années.

Vous pouvez tester sur https://projetdumois.fr

créer son blog gemini et https à la fois

petit tuto pour servir un blog gemini avec le serveur agate.

pour conquérir le monde avec vos écrits, et faire votre capsule gemini il vous faudra :

  • un nom de domaine, genre social.cipherbliss.com
  • un ordi relié à internet pour héberger votre site gemini
  • un logiciel de serveur gemini à qui vous direz où sont vos écrits, par exemple agate.
  • un fichier texte index.gmi qui liste d'autres fichiers gmi, mettons un fichier par article.

et voilà, vous pourrez accéder à votre capsule via Firefox si vous y mettez l'extension Geminize, ou via des navigateurs de véritables barbus comme Lagrange, ou le logiciel qui fait tout en ligne de commande, maintenu par le non barbu Ploum: offpunk.

Le meilleur moyen de partager ses écrits étant d'utiliser ce qu'on a déjà écrit dans le passé, il vous faudra trouver un moyen de récupérer vos écrits par un export et une conversion. heureusement il existe pandoc qui fait beaucoup de merveilles. Pour mon usage j'ai développé un dépôt qui me permet d'avoir mes écrits de plusieurs sites au format orgmode ou markdown, et de générer un blog et une capsule gemini à la fois pour chaque blog.

Dans cet outil, les fichiers org sont convertis en markdown via pandoc avant de passer par un reformatage pour bien distinguer les liens puis par md2gemini.

pour faciliter la découverte et la navigation j'ai fait en sorte de détecter les tags, de prendre en compte ceux précisés comme tags, de créer des Indexes listant les articles pour un certain tag, une liste de tous les articles, un flux rss, et de faire des liens en bas d'article pour revenir à l'accueil, inviter à soutenir financièrement mes projets, me contacter, ou suivre des gens que je recommande.

en fait le bon outil pour entretenir votre blog sera celui qui vous permet de facilement le mettre à jour. si c'est trop compliqué ou que vous devez chercher longtemps comment faire à chaque fois vous n'allez pas faire vivre ce site.

pour cela j'ai documenté le tout dans le readme, et créé des scripts pour fabriquer un nouvel article, régénérer les sites sans régénérer les pages qui n'ont pas été modifiées depuis la dernière génération. je me suis amusé avec un peu de scss qui fait du CSS, mais sans aller chercher moult typos et plugins en js, juste de quoi mettre en couleur des portions de code.

havez fun !

Faire une analyse avec Osmose-Backend

Osmose permet d'analyser les données d'OpenStreetMap et de les comparer à des données ouvertes pour proposer de les réunir, le tout avec une pile logicielle libre en python, et une base de données PostgreSQL qui se chargera de stocker les données d'OpenStreetMap.

Il existe un paquet d'analyses permettant de définir des règles de conversion et de vérification pour chaque thématique. Des "Plugins", eux, vont se charger de vérifier la validité des données. Imaginons que nous souhaitons intégrer de l'open data concernant les bornes de recharge électrique à partir du fichier de DataGouv. Il existe une analyse de type Merger, qui permet de fusionner des données avec l'existant de deux façons:

  • proposer l'intégration de données nouvelles
  • corriger les attributs des données existantes

Exemple de ce que donne l'analyse des station de recharge électrique sur Tours dans Osmose-Frontend: https://osmose.openstreetmap.fr/fr/map/#loc=11/47.3998/0.7302&item=8410%2C8411%2C8412&level=1%2C2%2C3

Choisir une analyse à faire fonctionner

Osmose propose plus de 90 analyses différentes. Pour avoir la liste de leurs noms lancez cette commande:

sudo service docker start

cd osmose-backend/docker

cd docker
docker-compose --project-name essonne run --rm backend ./osmose_run.py --list-analyser

Vous verrez que plusieurs analyses ont des noms très similaires, ils diffèrent par leur zone géographique car on valide différemment des données selon leur production, qui se fait souvent par zones et par des gens dont l'informatique n'est (généralement) pas du tout le métier. C'est pourquoi concernant la catégorie défibrilateurs vous avez ceci:

mergedefibrillatorsFR mergedefibrillatorsFRaedmap mergedefibrillatorsFRhautesalpes mergedefibrillatorsFRissylesmoulineaux mergedefibrillatorsFRlorient mergedefibrillatorsFRmontfort mergedefibrillatorsFRparis mergedefibrillatorsFRsaintmalo mergedefibrillatorsFRtoulouse

Vous pouvez faire une analyse qui incluera toutes les validation des zones à la fois de cette thématique, ou plus précisément en ne demandant qu'une validation spécifique à une zone, mais pas forcément sur cette zone. Sauf que vous risquez de ne pas avoir de données à comparer.

Avant de vous lancer dans un long travail de contribution à un logiciel libre, je ne peux que vous conseiller de causer sur le forum OSM France pour savoir si ce n'est pas déjà prévu, trouver de la documentation à lire, des gens à qui causer en cas de problème, breffe, les besoins de base pour toute contribution. https://forum.openstreetmap.fr

https://www.cipherbliss.com/2025/contribuer-%c3%a0-un-projet-libre/

Avant d'aller vraiment modifier une analyse, on va faire tourner le projet sur son propre ordi et voir ce qui se passe dans une analayse simple.

Analyser une zone localement

Disons que l'on veut modifier le Merger `mergechargingstationFR`, et que l'on veut voir ce que donne nos modifications en lançant une analyse. Pour éviter que cela prenne toute la journée, nous allons restreindre le champ d'analyse au patelin perdu de Monaco. Après une installation locale avec docker-compose du dépot osmose-backend, nous pouvons lancer cette commande qui va demander au point d'entrée principal de faire marcher l'analyse `mergechargingstationFR` sur la zone `monaco`, sans supprimer les données en base si elles existent déjà:

# je vous passe l'installation de docker et docker-compose
git clone https://github.com/osm-fr/osmose-backend 
cd osmose-backend/docker
docker-compose --project-name monaco-irve run --rm backend ./osmose_run.py --country=monaco --no-clean --analyser=merge_charging_station_FR

Sur ma tour cela prend autour de 15 secondes.

Cela va créer un fichier xml dans le dossier "docker/work/results" listant les alertes détectées par notre analyseur. Ce sont ces alertes qui permettent d'afficher les punaises de couleur sur la carte du frontend. Elles contiennent les informations traduites dans plusieurs langues des problèmes rencontrés, les tags à ajouter ou enlever, etc…

Votre terminal vous listera le déroulement de l'analyse, la mise à jour ou non de la base de données sur la zone concernée, les passes de conversion et de vérification.

Exemple d'un Analyser

Voici l'analyse des stations de recharge électrique en France: https://github.com/osm-fr/osmose-backend/blob/dev/analysers/analyser_merge_charging_station_FR.py

Ce Merger va récupérer les données depuis datagouv, puis convertir les données selon un ensemble de règles en liste blanche. On définit la documentation qui apparaîtra dans le frontend, l'url du fichier open data, la façon dont on détermine les positions des objets, et la correspondance entre les définition des propriétés des objets et les tags OSM. Ces correspondances ont été choisies par la communauté avant d'atterir dans une analyse Osmose. Tous les champs du fichier opendata ne sont pas forcément utilisés, certains n'ont pas de tag, certains identifiants n'ont pas de sens en dehors des logiciels persos des producteurs, certains demanderaient de créer des objets séparés, certaines informations doivent être regroupées ou reformatées, certaines sont trop vagues pour être qualifiées correctement, bref c'est festival.

https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques#Tableau_de_correspondance

L'analyse de l'open data utilise d'ailleurs un csv qui fait suite à un retraitement des données initiales, mis à jour quotidiennement sur datagouv par JungleBus, et vous trouverez ici le détail de l'opération: https://github.com/Jungle-Bus/ref-EU-EVSE

La conversion que je fais de ce jeu de données dans Wololo est différente et ne regroupe pas les totems en stations.

Mais revenons à l'analyse.

Par exemple dans l'Analyser on a une ligne de mapping qui dit que l'on prend la valeur de "datemiseenservice" pour en faire un tag "startdate", c'est la conversion la plus simple:

"start_date": "date_mise_en_service",

Des fonctions lambda sont utilisées pour des conversions un peu plus complexes.

"bicycle": lambda fields: "yes" if fields["station_deux_roues"] == "true" else None,

On a aussi une conversion pour les items wikidata qui dépendent du nom de l'opérateur:

# au début de la classe Analyser
    WIKIDATA_MAP = {
        "ionity": "Q42717773",
        "bouygues": "Q3046208",
        "freshmile": "Q111209120",
        "lidl": "Q115764851",
        "Electra": "Q128592938",
        "TotalEnergies Charging Services": "Q154037",
        "Last Mile Solutions": "Q109733858",
        "Izivia": "Q86671322",
    }
# ......  et plus loin dans la définition des mappings, on utilise ce dictionnaire
           "wikimedia:network": lambda fields: self.WIKIDATA_MAP.get(fields["nom_enseigne"].lower(), None) if fields["nom_enseigne"] != "0" else None,

Ce genre de conversion simple suffit pour la plupart des jeux de données ouverts. Pour des exepples plus complexes vous trouverez des requêtes SQL spatiales dans d'autres analyses, comme par exemple pour les façons de qualifier les attaches des câbles télécom ou électriques sur les pylônes.

N'oubliez pas de faire des tests unitaires sur vos Analysers.

Si vous êtes prêts à passer à une zone plus grande, changez la valeur de "country". Les noms des countries sont un enchaînement de zones séparées par des soulignés.

docker-compose --project-name essonne run --rm backend ./osmose_run.py --country=france_ile_de_france_essonne --no-clean --analyser=merge_charging_station_FR

Pour bricoler vos analyses je ne peux que vous conseiller de lire la documentation dans le dossier "doc" du dépot osmose-backend. Le wiki d'OSM est un complément mais beaucoup moins exhaustif.

Bon amusement!

  • La documentation dans le wiki OSM:

https://wiki.openstreetmap.org/wiki/Osmose

  • Le site web d'osmose pour voir les alertes:

https://osmose.openstreetmap.fr/fr/map/

  • Des conférences sur le sujet:

https://peertube.openstreetmap.fr/search?search=osmose&searchTarget=local

  • Les sources du backend:

https://github.com/osm-fr/osmose-backend

  • La documentation du frontend:

https://github.com/osm-fr/osmose-frontend

Wololo! convertir de l'open data en geojson vers des tags openstreetmap

wololo monk from age of empire image

L'open data concernant les choses situées géographiquement est une mine d'or d'informations mal foutues. Les transformer en vue de les comparer à ce qui existe dans OpenStreetMap est un travail qui a été réalisé de plusieurs façons par bien des personnes différentes.

Aussi je me devais de réaliser une autre façon de faire cela en me concentrant sur des données au format Geojson. Ainsi est né le projet Wololo. L'idée est d'avoir quelques scripts qui vont prendre un certain jeu de données et y appliquer une configuration de conversion en ignorant les données qui ne rentrent dans aucune partie du convertisseur pour en sortir un autre fichier geojson que l'on peut ensuite examiner dans JOSM ou dans d'autres outils d'analyse.

https://forge.chapril.org/tykayn/wololo

Vous pouvez par exemple voir ce que cela donne sur le jeu de données Data Gouv des bornes de recharge pour véhicules électriques qui contient une cinquantaine de propriétés différentes:

git clone https://forge.chapril.org/tykayn/wololo
cd wololo
npm install
make irve

Le makefile permet de lancer des scripts prédéfinis sur le point d'entrée principal du projet, du Nodejs écrit en TypeScript à qui on donne un fichier à convertir et une configuration de conversion.

ts-node convert_to_osm_tags.ts

Vous avez le fichier geojson qui a suivi les conversions selon le Mapper IRVE, et celui ci contient des tags OpenStreetMap. Ça se passe par ici: https://forge.chapril.org/tykayn/wololo/src/branch/main/mappings/converters/configIRVE.ts

Un petit exemple de la partie tags

Lorsqu'une feature du Geojson d'origine contient des informations sur plusieurs points de charge, on fait une feature de station de recharge (amenity=chargingstation), et si il n'y en a qu'un seul, on un fait une feature de point de charge (amenity=chargingpoint). Les autres propriétés de la feature sont ajoutées selon certaines conditions de clés et de valeurs, puis éventuellement formatées selon les standards déterminés par le Wiki d'OpenStreetMap comme par exemple pour les puissance en kW ou les numéros de téléphone. Les travaux d'intégration des données ouvertes sont documentées dans le wiki OSM, ici par exemple pour les bornes de recharge: https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques Ce qui permet de savoir comment convertir les propriétés de l'open data.

J'ai aussi ajouté des tags wikidata concernant quelques opérateurs de stations de recharge.

Faire une conversion peut être assez difficile car les producteurs de données sont plus de 3000 et ont chacun les bras cassés d'une façon différente, ce qui est très courant dans l'open data en général. Comme dit l'adage, garbage in, garbage out: on ne peut faire de bonnes conversions que si les données d'entrée sont bonnes. https://fr.wikipedia.org/wiki/GIGO

Pour limiter cela, des filtres sont possibles si on change le fichier de configuration afin de tester des résultats sur des plus petits ensembles de données, et le convertisseur informe de la présence de filtres activés lors de l'exécution du script principal.

Conversion de clé

Dans un Mapper, c'est la partie qui s'occupe de définir comment on convertit les propriétés de chaque Feature du Geojson:

  const MappingIRVE: MappingConfigType = {
  tags: {
          nbre_pdc: 'capacity',
          siren_amenageur: 'owner:ref:FR:SIREN',
          date_mise_en_service: 'start_date',
          nom_station: 'description',
          // ... etc
  }
}

On convertit la clé "sirenamenageur" en "owner:ref:SIREN" et on garde la même valeur.

Conversion avec des transformations avancées

La configuration accepte aussi les objets JS pour définir quoi faire selon les valeurs. Ici pour la puissance on devrait avoir des kW, mais comme je disais avant, c'est rempli avec les pieds, on applique donc une fonction de conversion qui va se charger de deviner la puissance. La fonction n'est pas définie dans le Mappeur, mais dans le moteur de conversion qui reconnaîtra la clé socketoutputfindcorrespondances pour lancer une fonction sur les données de chaque Feature pour tenter de trouver une valeur correcte.

  const MappingIRVE: MappingConfigType = {
  tags: {
      puissance_nominale: {
          key_converted: 'charging_station:output',
          socket_output_find_correspondances: true,
      }
          // ... etc
  }
}

La fonction qui permet de trouver la puissance des sockets est détaillée dans ce fichier:

Dans les exemples suivants je masquerai la partie autour des exemples se trouvant dans la partie tags

Valeurs conditionnelles

L'accessibilité a été décrite de plusieurs façons, notamment avec la notion de "réservé aux PMR" que je n'ai pas retrouvé dans le wiki d'OSM. J'ai donc mis une conversion de valeur conditionnelle vers "wheelchair=yes" dans le cas de plusieurs valeurs particulières pour la propriété "accessibilitepmr".

accessibilite_pmr: {
    key_converted: "wheelchair",
    conditional_values: {
        "Accessibilité inconnue": {
            ignore_this_data: true, // ne pas ajouter de tag wheelchair si la valeur est égale à Accessibilité inconnue.
         },
    "Accessible mais non réservé PMR": {
        value_converted: "yes"
    },
    "Réservé PMR": {
        value_converted: "yes"
    },
    "Non accessible": {
        value_converted: "no"
    },

Inversion de valeur booléenne

Quand l'open data demande si une station est gratuite à l'usage et que l'on a une clé openstreetmap qui dit oui quand ce n'est pas gratuit, il faut inverser la valeur du oui de l'open data.

/**
     * l'info de gratuité a été mal renseignée par les opérateurs, ils mettent TRÈS souvent que c'est gratuit alors que ce n'est pas vrai.
     */
    gratuit: {
        key_converted: 'fee',
        convert_to_boolean_value: true,
        invert_boolean_value: true,
    },

Suppression de clé originale

stationdeuxroues est une propriété qui n'a pas de tag dans OSM, mais on veut ajouter trois autres tags quand on la croise et qu'elle vaut "vrai". J'ai donc dû faire en sorte de supprimer une clé et ajouter des tags de façon conditionnelle. En gardant la logique précédente on a donc ceci:

station_deux_roues: {
            remove_original_key: true,
            conditional_values: {
                // ajout de trois tags si la valeur est yes
                "yes": {
                    tags_to_add: [
                        { bicycle: "yes" },
                        { scooter: "yes" },
                        { motorcar: "no" },
                    ]
                }
            }
        },

Ces quelques règles simples de transformations à appliquer aux features permettent d'avoir une description lisible et des fonctions réutilisables d'un jeu de données à un autre.

Certaines clés du Mappeur permettent de ne pas avoir à décrire quoi faire pour toutes les clés où les opérateurs ont eu la flemme de remplir les données ou d'apprendre à écrire des accents. Exemple ici, où on ignore les Features si la valeur est "Non renseigne":

https://forge.chapril.org/tykayn/wololo/src/branch/main/mappings/converters/configRouen_PAV.ts

tags_to_ignore_if_value_is: ['Non renseigne'],

Nous avons aussi la possibilité de toujours mettre un certain tag et une certaine valeur à toutes les Features que l'on ajoute à notre conversion. Pour les points d'apport volontaire décrivant ds conteneurs, on voudra toujours avoir ces deux tags à minimum: amenity=recycling et recyclingtype=container


default_properties_of_point: {
        'amenity': 'recycling',
        'recycling_type': 'container',
    },

Comment ajouter un convertisseur de jeu de données:

Une documentation détaille les étapes pour créer votre Mappeur et l'intégrer au projet. https://forge.chapril.org/tykayn/wololo/src/branch/main/docs/ajout_jeu_de_donn%C3%A9es.md

Pour d'avantage de flemme, un script python permet de vous proposer des choses à mettre dans la partie tag d'un Mappeur sans avoir à aller chercher toutes les propriétés possibles des features à la mano.

python propose_mapping_from_data.py etalab_data/musées/fr.geojson

Les propositions restent en console et ne sont pas écrites dans un fichier de Mappeur, vous n'avez plus qu'a copier et faire le tri dans un futur Mappeur. Cela vous permettra aussi de détecter des propriétés similaires si vous avez affaire à des champions des bras cassés de l'open data.

Le projet Wololo permet aussi d'appliquer des conversions sur des geojson issus d'Osmose.

https://osmose.openstreetmap.fr

Extraction de données depuis OpenStreetMap

On peut faire des extractions thématiques sur des données OpenStreetMap un peu à la façon Geodatamine. https://geodatamine.fr/

Ça se passe dans les extractors, ce sont des scripts bash qui utilisent une requête overpass et une fonction bash pour faire un geojson d'export, que l'on stocke dans osmoutput.

https://forge.chapril.org/tykayn/wololo/src/branch/main/mappings/extractors/planning_familiaux.sh

La fonction extractfromosm : https://forge.chapril.org/tykayn/wololo/src/branch/main/update_scripts/functions.sh

On peut lancer tous les extracteurs à la suite avec ce script de mise à jour pour ensuite travailler sur des données fraîches.

bash update_scripts/run_all_extractors.sh

Pour ne pas blinder l'espace disque de la forge logicielle, les extractions et les fichiers geojson transformés ne sont pas versionnés, merci au Gitignore.

Bonnes conversions de données ouvertes!

Quelques concepts autour d'OpenStreetMap

La connaissance autour d'OSM se construit de façon collective et est documentée dans le wiki d'OSM, rédigée collectivement, avec un ensemble de descriptions plus ou moins cohérentes, avec des variations selon les endroits. Le wiki d'OSM est fait avec MédiaWiki, le même logiciel que Wikipédia.

Tout le monde peut créer de nouvelles façons de qualifier les choses que l'on peut constater dans le monde réel, même si ces choses ne sont pas forcément visibles depuis l'extérieur. Un exemple, les réseaux électriques ou la présence de toilettes, de moyens de paiement, ou d'autres services tel qu'Ask Angela dans un commerce, ou encore ses horaires d'ouverture.

La grammaire des étiquettes.

Pour rester infiniment incohér… extensible, le système de tags d'OSM ne possède pas de contrainte de validation ou de typage fort. Toutes les étiquettes sont des chaînes de caractères valables. C'est le principe "any tags you like" FR:Créer un attribut qui manque - OpenStreetMap Wiki

Si on veut préciser l'unité de valeur d'un nombre on peut la mettre ou pas, seule une documentation dans le wiki, et des outils de contrôle qui suivent ces règles de validation, ou des gens qui suivent les modifications d'un certain type d'objet, pourront comprendre qu'il y a une erreur. Ainsi, si un jour on décide qu'il vaut mieux mettre l'unité d'une mesure dans un tag séparé, on peut le faire avec un petit script de remplacement.

Anatomie des étiquettes osm - OpenStreetMap Wiki

Une tentative de groupement des sous clés à été documentée ici: Order of key parts - OpenStreetMap Wiki

Les bonnes pratiques

Réutilisez les étiquettes existantes, ne mappez pas juste pour faire joli si ça n'a pas le sens qui décrit le monde réel correspondant, mettez le vrai nom des choses et non une description.

FR:Bonnes pratiques - OpenStreetMap Wiki

Vérifiabilité

Pouvoir vérifier une information dans le monde réel et la faire correspondre dans la base de données d'OSM est un des principes de base.

FR:Vérifiabilité - OpenStreetMap Wiki

Quand une chose est plusieurs choses.

Comment tagguer un hotêl restaurant ? Il existe `amenity=hostel` et aussi `amenity=restaurant`, on devrait donc logiquement utiliser une énumération qui dit que l'on a ici une aménité qui est un hôtel et un restaurant, non ? Hé bien non, certaines clés sont documentées comme ne pouvant pas être une énumération. Ce que l'on fait souvent alors, c'est faire de la qualification en fonction de la majorité de surface.

FR:Un item, un objet OSM - OpenStreetMap Wiki FR:Séparateur de valeur point-virgule - OpenStreetMap Wiki

Certaines descriptions sont contre intuitives.

Les choses contre intuitives le sont pour plusieurs raisons, et elles le restent à cause des procédures de modification des tags pour lesquelles la grande majorité des gens sont frileux. Il est d'ailleurs assez étonnant que modifier une base de données semble aussi complexe alors que beaucoup de modifications très simples pourraient être faites car on modifie des informations numériques et qu'il est très simple de vérifier leurs effets de bord sans tout casser sur la base partagée.

Counterintuitive keys and values - OpenStreetMap Wiki

La plupart du temps, les gens opposent que l'on ne devrait pas changer la façon dont sont tagguées les choses pour la rétrocompatibilité avec les gens qui réutilisent les données, les éditeurs de logiciel de carte, et aussi parce qu'ils n'ont pas envie de modifier les indexes de nom de recherche.

"On ne change pas un truc qui fonctionne", cette aversion au changement, alors que des outils et des procédures existent pour faire cela, est très connue dans le monde de la cybersécurité comme "le problème de l'adhérence logicielle". On est scotché à certains logiciels ou certaines façons de faire pas parce qu'elles sont meilleures que le reste, mais juste parce qu'on a une peur bleue qu'il faille ensuite faire des choses qu'on ne fait pas actuellement pour que ça continue à fonctionner.

Comment tuer OSM ? Surtout, ne changeons rien par Florian Lainez - peertube.openstreetmap.fr

FR:Code de conduite des modifications automatisées - OpenStreetMap Wiki

Comment qualifier correctement un ensemble d'objets et ses précisions possibles?

Il serait probablement bon de clarifier ce que l’on attend des modèles de tags pour faciliter les consensus.

Personnellement j’attends quelques qualités aux tags, sans ordre de priorité:

  • une cohérence dans un ensemble et dans ses sous ensembles
  • la réutilisation au mieux de ce qui existe déjà, permettre des combinaisons
  • suivre une anatomie qui soit facilement compréhensible et documentée dans le wiki
  • des tags au plus possible anglophones et bas de casse pour une utilisation mondiale
  • une spécificité suffisante
  • une clarté, de la désambiguation
  • un certain lien entre monde réel et mots utilisés
  • ne pas avoir peur de faire évoluer les tags et déprécié ce qui est mal foutu, même si c’est utilisé. On ne devrait pas rester bloqué pour des raisons de « on a toujours fait n’importe quoi alors pourquoi faire autrement? »

Utiliser le principe de moindre surprise en ingénierie informatique. Principe de moindre surprise — Wikipédia

Les identifiants d'objets ne sont pas pérennes

Zut alors, on ne peut pas simplement faire un lien vers un restaurant et espérer qu'il soit lu pour toujours comme un lien pointant vers ce lieu précis? En fait, à court terme, si, mais pas sur le long terme. Les commerces changent assez souvent dans le monde réel, mais les identifiants d'OSM peuvent aussi changer si quelqu'un fait une modification sur un chemin en le découpant ou en supprimant un objet pour en créer un autre avec des informations similaires ailleurs, l'identifiant est perdu et l'URL vers un noeud sera morte.

La wikibase à la rescousse

Un des grands intérêts d'OSM est de pouvoir être un pivot entre plusieurs autres bases de données. Et la wikibase permet de mettre du sens entre plusieurs objets à l'identifiant pérenne grâce à des notions de web sémantique qui proposent de relier entre eux des concepts. Par exemple, on peut y distinguer que Guestave Eiffel est l'inventeur de la Tour Eiffel, et que si on veut connaître toutes les tours de France on ne demande pas la même chose que "je veux voir une description de ce qu'est l'évènement le Tour de France".

FR:Collaboration avec Wikipédia - OpenStreetMap Wiki

La gestion des cycles de vie d'un objet et d'un tag

Il y a deux choses à distinguer ici:

  • Les objets du monde réel sont envisagés, construits, changent, et disparaissent. On utilise alors des clés et des préfixes de clé pour décrire ces étapes.

FR:Key:proposed - OpenStreetMap Wiki Category:FR:Cycle de vie - OpenStreetMap Wiki FR:Key:construction - OpenStreetMap Wiki FR:Key:startdate - OpenStreetMap Wiki

  • Les étiquettes évoluent dans le temps, certaines deviennent dépréciées et on met alors en place des contrôles de qualité pour vérifier à ce qu'elles ne réaparaissent pas.

Participez aux ateliers en visio ou en présence

Le meilleur moyen de vraiment adopter OSM et sa richesse est de rencontrer les gens qui y participent et de voir comment ce que l'on connaît peut s'insérer dans ce grand commun numérique.

En attendant des rencontres, vous pouvez échanger sur le forum qui est une mine d'or pour voir le fonctionnement de la gouvernance, les outils, les erreurs courantes, trouver des gens près de chez vous, les thématiques qui pourraient vous intéresser, comment réutiliser les données, comment trouver tous défibrillateurs, ou les panneaux biche.

Forum OSM France - Le forum de discussions autour d'OpenStreetMap

Partagez des photos avec Panoramax

Combiner des images de terrain avec des enquêtes au plus près du monde réel pour le décrire au mieux. Contribuer à Panoramax avec son smartphone est une excellente piste pour cela.

Quelques liens:

Pour aller plus loin: