OpenStreetMap

cquest's Diary

Recent diary entries

OpenStreetMap France : la genèse de l'association

Posted by cquest on 8 October 2021 in French (Français). Last updated on 9 October 2021.

L’association OpenStreetMap France a été créée le 8 octobre 2011, il y a 10 ans.

Nous fêterons cet anniversaire lundi 11 octobre dans plusieurs endroits en France, ainsi qu’en ligne.

C’est l’occasion de revenir sur cette première décennie et pour commencer sur la génèse de l’association.

La première trace de discussion sur le principal canal de communication (talk-fr) date du 16 novembre 2009:

https://lists.openstreetmap.org/pipermail/talk-fr/2009-November/016188.html

Robin Prest pose la question “Voulez vous créer une association OSM France ?” après que Pieren et Etienne Chové mentionnent “une association française qui mettrait en place des serveurs (avec peut-être un soutien pour l’administration) et qui a surtout besoin d’un porte-parole”. Le sujet des serveurs est en effet important à l’époque, pour mettre en place des services (comme osmose) et les dons ne sont envisageables qu’avec une structure officielle. L’Université de Nantes fera ainsi le “mirroir” pour le don d’un lot de serveurs venant de chez free (voir: https://lists.openstreetmap.org/pipermail/talk-fr/2009-November/016284.html).

Un vote est lancé sur un Doodle… une cinquantaine de “OUI” se dégage en quelques jours.

Le mode de fonctionnement proposé par Robin est le suivant:

D'ailleurs, je suggère que les statuts prévoient de "soutenir" le projet
plutôt que de le "diriger" - référence au message de **sly** sur la république
bananière - ce qui permet une certaine souplesse dans le fonctionnement
général. D'ailleurs, on peut avoir OSM tel quel avec sa communauté de plein
de gens anonymes qui participent sans se prendre la tête avec le côté
administratif  et une assoc OSM france dont un des buts est de soutenir le
projet d'une façon ou d'une autre (par l'hébergement via des serveurs, par
la collecte de dons, par les communiqué de presse, par ses relations, etc),
l'un n'empêche pas l'autre.

Christian Rogel propose une première version de l’objet de l’association à inclure dans de futurs statuts… https://lists.openstreetmap.org/pipermail/talk-fr/2009-November/016376.html

Les discussions tournent alors autour de la gouvernance (l’asso en soutien de la communauté), des liens avec l’OSMF (le statut de “local chapter” et ses conséquences), du besoin de leader / gestionnaires, OpenStreetMap ou Openstreetmap, direction collégiale ou le classique président/trésorier/secrétaire,

Denis Mentre pose les bases du fonctionnement horizontal de l’association: https://lists.openstreetmap.org/pipermail/talk-fr/2009-November/016363.html

Une page du wiki synthétise le résultat: https://wiki.openstreetmap.org/wiki/France/Projet_d%27association_en_France

Calme ensuite pendant 4 mois jusque Février 2010, Frédéric Rodrigo relance le sujet… est envisagée une section au sein de l’OSgéo-FR et on parle un peu de financement.

Sujet mis en veille plus d’un an jusqu’en Mars 2011, relancé par RatZilla$ (Gaël Musquet)… qui termine par un “Action !https://lists.openstreetmap.org/pipermail/talk-fr/2011-March/031547.html La discussion enchaîne sur “Paris / pas Paris”, mais le porte-parole attendu par Etienne semble être arrivé !

Juin 2011, feu vert de l’OSMF obtenu par Gaël pour utiliser le nom “OpenStreetMap France”: https://lists.openstreetmap.org/pipermail/talk-fr/2011-June/033671.html

Juillet 2011, une nouvelle mouture de statuts est discutée jusqu’en Août.

L’annonce de l’AG constitutive du 8 octobre est fait par Gaël le 21 septembre 2011: https://lists.openstreetmap.org/pipermail/talk-fr/2011-September/035609.html précédée le 7 octobre d’une journée de présentations et ateliers.

Les discussions post AG portent sur… le logo !! https://lists.openstreetmap.org/pipermail/talk-fr/2011-October/036242.html

L’association étant créée, nous pouvons maintenant solliciter plus directement du soutien auprès d’institutions ou d’entreprises. Camptocamp fera même un premier don de 1000€ lors de l’AG constitutive.

Comme on le constate, il aura fallu près de deux ans pour passer du rêve à la réalité, le temps qu’une masse critique s’agrège pour la constitution de l’association et avoir la dynamique suffisante pour assurer ses premières années de fonctionnement.

44 personnes ont participé à cette Assemblée Générale constitutive, la liste se trouve sur le wiki et comme on ne jette vraiment rien, vous avez même le log IRC archivé !

Location: 75002, Paris, Île-de-France, France métropolitaine, France

Bilan de mes devoirs de vacances... rendu FR, nouveaux serveurs, tests, tests !

Posted by cquest on 31 August 2021 in French (Français). Last updated on 1 September 2021.

J’ai profité de l’été pour me (re)-lancer dans le chantier “serveurs de tuiles”.

Petits rappels

OpenStreetMap France héberge génère plusieurs fonds de carte à l’aide de ses “serveurs de tuiles”:

  • rendu “FR”, une adaptation commencé en 2012 du style OSM de l’époque, destinée à un public francophones (noms en français en priorité, icône plus parlantes en France, etc) avec des ajouts originaux (terrains de sport, etc)

  • le rendu “humanitaire” largement utilisé par HOT et disponible aussi sur openstreetmap.org

  • le rendu “CyclOSM” , le petit dernier, lui aussi disponible sur openstreetmap.fr

À cela s’ajoute aussi OpenRiverBoat, un rendu adapté à la navigation fluviale, des rendus en langues régionales, des rendus techniques.

Les trois premiers sont assez fortement utilisés et complexes. Le rendu “FR” contient par exemple 82 couches différentes parfois multiples ce qui donne au total plus de 170 couches de dessin pour arriver au rendu final avec plus de 10000 règles qui servent à décider comment représenter graphiquement tel ou tel objet.

Les outils utilisés

Le cœur est une base postgresql/postgis, qui contient les données OSM utiles à la fabrication du fond de carte et à sa mise propre mise à jour.

Les données OpenStreetMap brutes sont importées dans postgresql puis mises à jour régulièrement à l’aide d’osm2pgsql. Typiquement la base résultat occupe environ 1To.

La génération du fond de carte est faite par renderd qui utilise la librairie mapnik pour transformer les données vectorielles issues de postgresql en images en appliquant une feuille de style.

Cette feuille de style au format XML utilisée par mapnik, est générée à l’aide de kosmtik à partir un code source écrit en cartocss, une sorte de CSS adaptée à la cartographie.

renderd interagit avec apache via mod_tile qui gère un cache de “méta-tuiles” contenant 8x8 tuiles telles que demandées par les navigateurs, de 256 ou 512 pixels de côté (version “retina” en double résolution).

Un cache est en effet nécessaire car le calcul d’une méta-tuile peut prendre plusieurs secondes (parfois plusieurs dizaines de secondes).

Besoin grandissants et saturation

Depuis plusieurs années, nos serveurs de tuiles saturent régulièrement et ont du mal à suivre les demandes pour mettre à jour le fond de carte sans trop de délais.

En effet, la base de données OpenStreetMap est en perpétuelle évolution, et le fond de carte produit avec a besoin d’être mis à jour en permanence, surtout quand ceux-ci sont consultés par des contributeurs qui veulent vérifier que leurs contributions ont bien été prises en compte et sont correctes.

Lors de chaque mise à jour faite par osm2pgsql, une liste des tuiles impactées par les changements et générée, or, le nombre de contribution augmente au rythme du nombre de contributeur qui de fait que croître (tant mieux !).

La quantité de données dans la base de données augmente elle-aussi, ce qui fait plus d’objets à récupérer dans la base de données et à dessiner sur une zone donnée.

Et troisième phénomène, les consultations elles aussi ont fortement augmenté… donc tout mis bout à bout, la charge sur les serveurs n’est plus du tout la même que lorsque nous les avons mis en place il y a bientôt 10 ans pour certains !

L’ajout de RAM ou de SSD toujours plus rapides et volumineux ne suffit plus… il faut changer aussi les serveurs.

Tests et optimisations

Revoir la stratégie de mise à jour du cache

À chaque contribution, à un endroit donné, toutes les tuiles sont potentiellement impactée à tous les niveaux. osm2pgsql ne sait pas en effet déterminer si tel objet figure bien sur le rendu niveau de zoom par niveau de zoom.

L’ajout ou la modification d’un banc qui ne sera visible que sur les plus forts zoom, n’a pas d’impact sur les zooms plus faibles… mais c’est très complexe à déterminer.

Recalculer une tuile de niveau 13 ou 14 est bien plus coûteux car elles contiennent typiquement plus d’objets que les tuiles de zoom 19 ou 20. Sur Paris par exemple, c’est de l’ordre de 100 000 objets en zoom 13/14 contre quelques milliers en zoom 19/20.

Il faut donc limiter le recalcul coûteux et souvent inutile à certains zoom.

Pour les zoom 0 à 12, ce recalcul est fait une fois par semaine, en plein nuit, pendant les heures creuses (qui étaient bien rares).

Jusqu’à maintenant, à chaque mise à jour de la base, toutes les tuiles à partir du zoom 13 était “invalidéee”, c’est à dire marquées dans le cache comme obsolètes et devant être recalculées. Dès qu’elles étaient demandées pour être vue par un internaute, mod_tile demandait à renderd de la recalculer

J’ai remplacé cette invalidation systématique, par une invalidation zoom par zoom. Le zoom 13 est (au moment ou j’écris ce billet) invalidé une fois par jour, puis le 14 deux fois par jour, le 15 et le 16 quatre fois par jour, mais pas en même temps, et à partir du 17 il n’y a pas de changement. Cela va sûrement évoluer.

Un pic de charge est visible sur les graphes du serveur suite à l’invalidation, mais tout cela reste assez lissé pour éviter les saturations tout en favorisant le recalcul des zooms les plus élevés, là où un contributeur voudra vérifier sa contribution.

Nouveaux serveurs

Cela faisait longtemps qu’on devait le faire suite à un appel aux dons de fin 2018 et un nouveau serveur a été acheté cet été. Une machine d’occasion, donc à prix très raisonnable comparé à du neuf, mais d’une génération pas trop ancienne.

Il s’agit d’un rack Fujitsu Primergy CX400M1, contenant 4 lames avec chacune 2 Xeon avec 12 cœurs… 96 cœurs au total !

Vue arrière serveur CX400M1

Voici une des lames, avec à gauche un premier CPU avec sa RAM, puis le second, puis les 2 emplacements PI Express 3.0: Lame CX2550

Ajout de RAM (256Go, mais chaque lame peut avoir jusqu’à 1To de RAM) de SSD NVMe et SATA (2To chacun)… et on peut démarrer les tests.

ZFS or not ZFS ?

ZFS est un système de stockage très complet, qui aligne plein de fonctionnalités intéressantes. J’ai voulu vérifier que ceci ne se faisait pas (trop) au détriment de la performance…

J’ai donc testé l’import de la base monde (alias “planet”) en ZFS, avec et sans compression, avec de petits blocs de 8K ou des gros de 128Ko, etc… au final ça ne change presque rien, mais l’espace occupé sur disque par la base de données peut être divisé par 2 !

Ceci a aussi pour conséquence qu’une part plus importante de la base peut reste en RAM dans le cache de ZFS (l’ARC) qui reste compressé lui aussi… et donc on limite encore un peu plus les I/O en utilisant un peu de CPU pour la décompression à la volée… et avec 24 cœurs il y a de quoi faire :)

ZFS validé !

Tuning de postgresql

Postgresql et postgis ont eux aussi évolué (versions respectives 13 et 3.1)… de nouveaux types d’index sont venus compléter les index GIST, il s’agit des SP-GIST.

Passer de GIST à SP-GIST permet de diviser par 3 la taille des index sur les objets linéaires et surfaciques, un peu moins sur les ponctuels.

Des index plus petits, c’est plus d’index en cache, et là encore plus de performances au final.

Un autre progrès vient d’osm2pgsql qui utilise un nouvel index bien plus compact pour retrouver les way passant par un node.

Couplé à la compression de ZFS, c’est au final près de la moitié de la base de données (data+index) qui peut tenir désormais dans les 256Go de RAM du serveur ce qui accélèrent grandement les requêtes en évitant les accès au SSD qui bien que rapide est quand même bien plus lent que la RAM.

Tuning de renderd/mapnik

Là cela se passe à plusieurs niveaux :

  • simplifier la feuille de style, par exemple en réduisant le nombre de “couches”

  • améliorer les requêtes postgresql pour retourner uniquement les données utiles afin de réduire tous les traitements en aval

  • bien exploiter les index de postgresql

  • optimiser les appels de mapnik à postgresql

J’avais déjà passé mon été dernier sur les 3 premiers points, cette fois-ci j’ai attaqué le 4ème et là grande surprise !

cache CACHE !

Certaines couches de dessin utilisent les mêmes données, c’est à dire qu’une seule requête est faite dans la base de données mais qu’on applique ensuite plusieurs passe de style dessus.

Le fonctionnement pas défaut de mapnik est étonnant… il ré-exécute la requête. Une option (cache-features) permet de conserver le résultat et de ne pas répéter la requête plusieurs fois, mais ce n’est pas le fonctionnement pas défaut !

Là, je comprends enfin quelque chose… un “problème” constaté depuis plusieurs années que je n’expliquait pas: une perte énorme de performance. En fait mapnik, a sûrement changé son mode par défaut (je n’ai pas vérifié)… sans trop prévenir.

L’ajout de cette simple option a eu un effet radical sur notre serveur osm25 qui s’occupe essentiellement du rendu “FR”:

  • 53% des tuiles retournées par le serveur étaient expirées, c’est à dire non mises à jour, c’est maintenant moins de 4%

  • le CPU utilisé a très fortement baissé

  • le nombre de tuiles calculées par seconde a été multiplié par 4

C’est comme si on avait retiré le frein à main :)

D’autres améliorations ont aussi été faites en lisant mieux la documentation du fonctionnement de mapnik avec postgresql, comme l’utilisation de curseurs. J’avais loupé cette évolution, car on n’a pas toujours le temps de lire en détail les nouveautés lors des mises à jour de nos outils… un tort !

La suite…

Il reste à finaliser des modifications de la feuille de style “FR”, pour la déployer sur le nouveau serveur.

En attendant, la version en développement est visible ici:

https://osm.cquest.org/dev/#14/48.8500/2.3500

Harmoniser les index utiles aux 3 principaux rendus sera aussi un chantier à faire, c’est déjà largement le cas entre le rendu FR et humanitaire.

Une nouvelle année démarre et c’est l’occasion d’imaginer les voeux à souhaiter pour OpenStreetMap et sa communauté.

OpenStreetMap a démarré à partir d’une feuille blanche il y a plus de 15 ans pour créer le plus grand commun cartographique qui soit.

Ce commun existe par l’engagement de personnes aux profils et motivations diverses.

Les Chasseurs

Petit à petit, cette carte blanche s’est remplie avec des données collectées par des contributeurs “chasseurs”. À l’époque préhistorique d’OSM, il fallait en effet aller sur le terrain, équipé d’un GPS, d’un bloc-note et d’un crayon, pour prendre des notes puis reporter ça sur la feuille blanche, sans autre point de repère.

OpenStreetMap au 1er janvier 2007 OpenStreetMap au 1er Janvier 2007

Les contributeurs qui ont connu cette époque sont rares, moins de 500 contributeurs apparaissent dans les données au 1er janvier 2007 (un peu moins de 5000 un an plus tard), les comptes les plus actifs étant ceux utilisés pour l’import des traits de côte (source=PGS, vous vous souvenez ?)… afin de séparer terre et mer !

Le nombre de contributeurs a fortement augmenté depuis, on compte désormais régulièrement plus de 6000 contributeurs actifs quotidiennement. Ces 500 (444 pour être précis) sont désormais 1 177 633 au décompte du 27 décembre 2020 fait par Pascal Neis.

L’ajout de nouvelles données reste l’activité principale, comme l’indique ces autres statistiques :

Statstiques décembre 2020 https://osmstats.neis-one.org/?item=elements

Les Cueilleurs

Nos cueilleurs dans OpenStreetMap sont les réutilisateurs des données. Des réutilisateurs de deux natures : directs ou indirects.

Les réutilisateurs directs, sont ceux qui manipulent des données géographiques directement pour leur compte ou pour produire des outils et services pour d’autres.

En général ils savent qu’ils utilisent des données OpenStreetMap, les ont téléchargées, retraitées. Parfois, ils contribuent aussi et sont donc des chasseurs-cueilleurs.

Les réutilisateurs indirects, ce sont toutes ces personnes qui sur un site web ou dans une appli ont un fond de carte sous les yeux produits à partir de données OSM. Ils ne le savent souvent pas soit parce qu’ils n’ont pas remarqué l’attribution visible au coin de cette carte, ou soit parce qu’elle est absente ou cachée derrière un “i”.

Ces cueilleurs là, sont plus rarement des chasseurs-cueilleurs, car ils ne sont que rarement conscient qu’ils peuvent contribuer, le lien “improve this map” n’est en effet pas généralisé dans l’attribution et pourrait l’être plus systématiquement.

Les Jardiniers

Le jardinage dans OSM consiste en l’entretien des données, c’est-à-dire leur mise à jour régulière, la suppression d’informations obsolètes, la correction d’erreurs, le maintien de la cohérence.

La motivation principale est la qualité qui se décline sur :

  • l’exhaustivité (viser 100% de complétude sur tel ou tel type d’objet)
  • l’homogénéité (utiliser les mêmes tags partout, combler des trous sur le niveau de détail, etc)
  • la précision géométrique (par exemple recaler des éléments anciens tracés sur des sources peu précises à partir de nouvelles sources plus précises)

Ce rôle de jardinier est souvent ingrat car peu visible et moins valorisé que celui de chasseur. L’entretien d’un édifice est pourtant gage de longévité de la construction !

Le besoin vital de jardinage

Les données géographiques ont cette particularité de décrire un monde en perpétuel changement sur le terrain et doivent donc être entretenues au risque de devenir rapidement obsolètes et de moins en moins fiables.

Ce rôle de jardinier est donc très important pour l’avenir d’OpenStreetMap si l’on ne veut pas que le commun ne soit qu’une accumulation de données allant toujours plus dans le détail mais sans l’indispensable entretien de l’ensemble.

Revenons au début… les lignes de côte PGS. Leur tracé était très approximatif, car basé sur une analyse automatique d’images satellitaires de moyenne résolution. L’import fait en 2006 a été régulièrement affiné, mais il reste quelques zones sur les côtes françaises non retouchées depuis, alors que des données opendata précises des traits de côte sont disponibles et que nous avons maintenant des photos aériennes récentes de haute-résolution.

Noeuds PGS résiduels Encore quelques noeuds issus de PGS 2006

Valoriser les jardiniers

Pour mettre en avant leur travail, certains “projets du mois” pourraient être orientés sur le jardinage.

Le bouclage de certains chantiers (ex: tous les noeuds PGS version 1 ont été revus), pourrait être l’occasion d’une communication comme nous avions pu le faire lors de la fin du chantier sur les limites de communes (à revoir elles aussi car tracées à l’époque dans bien des endroits sur des plans raster du cadastre calés tant bien que mal dans JOSM).

Recruter des jardiniers

Les deux viviers immédiats sont les chasseurs et les cueilleurs.

Comment motiver les chasseurs à se mettre au jardinage, à corriger et entretenir plutôt que d’accumuler de nouveaux objets ou tags de détail ?

qui va entretenir ce que j’ajoute

Le simple fait de se poser régulièrement cette question pourrait permettre de prendre conscience de l’intérêt de l’entretien.

Les cueilleurs sont l’autre vivier et ont besoin d’outils encore plus simples pour contribuer à l’entretien comme le simple fait de confirmer qu’une information est toujours valable.

Aider les jardiniers

Vue la masse actuelle de données, il n’est pas évident de repérer ce qui a besoin d’être revu, amélioré, mis à jour voire supprimé car obsolète. C’est là où des outils sont indispensables pour que la marche à l’entrée du jardinage ne soit pas trop haute.

Osmose est un outil formidable pour cela. Il permet par ses analyses de repérer ce qui a besoin d’entretien. De nouvelles analyses plus orientées sur la fraicheur des données pourraient venir compléter l’existant qui s’est beaucoup développé ces dernières années autour de l’intégration de données opendata toujours plus nombreuses.

Quelques idées:

  • les bâtiments disparus du cadastre, ceux qui sont nouveaux
  • l’aide au repérage des landuse de Corine Land Cover non mis à jour en se basant sur d’autres sources comme le RPG, ou OCS-GE

La détection de divergences entre les données OSM et l’opendata est une approche possible, sûrement pas la seule.

L’ouverture de la BD Topo et l’accès à ces nouvelles données, doit être l’occasion de prendre un peu de temps pour repenser les outils pouvant faciliter le jardinage.

De la binette au motoculteur

Les jardiniers ont besoin d’aide, d’outils adaptés facilitant l’entretien pour passer de la binette au motoculteur voire au tracteur !

Avec l’ouverture de la BD Topo par l’IGN, une grosse masse de donnée géographique est désormais utilisable pour compléter et améliorer les données OpenStreetMap.

Comparer automatiquement les données OSM et IGN permet de gagner du temps et de concentrer les efforts de mise à jour là où ils sont nécessaire plutôt que de chercher l’aiguille dans la meule de foin.

Depuis quelques jours, nous pouvons enfin comparer le filaire des voies avec celui de la BD Topo ce qui, par exemple, permet de détecter les départementales rurales tracées au GPS il y a des années et pas trop revues depuis !

Le résultat est disponible dans osmose et pour aider à se repérer, un rendu “technique” de la voirie de la BD Topo est accessible depuis nos éditeurs habituels. Osmose couplé au mode télécommandé de JOSM permet de gagner énormément de temps !

Exemple de route décalée Exemple de route décalée

En rouge, c’est l’objet actuel dans OpenStreetMap, en magenta, le tracé provenant de la BD Topo.

Un peu plus de 30000 tronçons ont été repérés par l’analyse automatique, quelques centaines par département, ce qui devrait pouvoir être corrigé assez rapidement par les jardiniers volontaires !

Bon jardinage pour cette nouvelle année !

L'association Csgd94120 organise deux matinées d'initiation à OpenStreetMap à Fontenay-sous-Bois (94).

Rendez-vous Salle Irène Legal, 4 rue Fernand Léger à 10h.

Samedi 17 décembre de 10h à 12h :
- présentation du projet OpenStreetMap
- mini cartopartie dans le quartier (walking-paper, photos, etc)

Dimanche 18 décembre de 10h à 12h :
- saisie des contributions à l'aide de Potlatch et JOSM

En savoir plus: http://csgd94120concert.blogspot.com/2011/11/faire-de-lhistoire-avec-openstreetmap.html

Location: Les Grands Chemins, Bois Cadet - Montesquieu - Le Terroir, Fontenay-sous-Bois, Nogent-sur-Marne, Val-de-Marne, Île-de-France, France métropolitaine, 94120, France