Importer les données ouvertes de bornes de tri dans la commune de Marseille

Bonjour,

De la même façon que Ajouts bornes de vélo « levélo » manquantes à Marseille j’aimerai ajouter les bornes de tri manquantes (appelés Point d’Apport Volontaire) de la commune de Marseille.

J’ai fait un script similaire pour détecter les bornes déjà existantes et ne garder que les manquantes depuis la source de donnée de la métropole :

Script JS de diff entre données OSM et données OpenData
const fs = require('fs');
const exportOsm = JSON.parse(fs.readFileSync("./export_OSM_amenity=recycling_08052023.geojson"))
const exportAmpm = JSON.parse(fs.readFileSync("./point-dapport-volontaire-mamp.geojson")).features.filter(pav => pav.properties.commune === "MARSEILLE")

console.log(`OSM: ${exportOsm.features.length}`)
console.log(`AMPM: ${exportAmpm.length}`)

const missing = exportAmpm.filter((pav) => {
  const exists = exportOsm.features.find((existing) => {
    return existing.geometry.type === "Point" && (
      Math.abs(existing.geometry.coordinates[0] - pav.geometry.coordinates[0]) < 0.0002 &&
        Math.abs(existing.geometry.coordinates[1] - pav.geometry.coordinates[1]) < 0.0002
    )
  })

  return !exists
})

const toImport = missing.map(pav => {
  const isUnderground = pav.properties.type_lib === "Enterré"
  const isEmballage = pav.properties.flux_lib === "Biflux"
  const isGlass = pav.properties.flux_lib === "Verre"
  const isClothes = pav.properties.flux_lib === "Textile"

  pav.properties = {
    "amenity": "recycling",
    "recycling_type": "container",
    "ref": pav.properties.id_pav,
    "source": pav.properties.nom_donnee
  }

  if (isUnderground) {
    pav.properties["location"] = "underground"
  }

  if (isGlass) {
    pav.properties["recycling:glass_bottles"] = "yes"
  }

  if (isEmballage) {
    pav.properties["recycling:paper"] = "yes"
    pav.properties["recycling:plastic"] = "yes"
    pav.properties["recycling:packaging"] = "yes"
  }

  if (isClothes) {
    pav.properties["recycling:textiles"] = "yes"
  }

  return pav
})

console.log(`To import: ${toImport.length}`)

// convert JSON object to a string
const data = JSON.stringify({
  "type": "FeatureCollection",
  "features": toImport
})

// write file to disk
fs.writeFile('./toImport_missing_pav.geojson', data, 'utf8', err => {
  if (err) {
    console.log(`Error writing file: ${err}`)
  } else {
    console.log(`File is written successfully!`)
  }
})

Ce qui me donne

OSM: 832
AMPM: 3344
To import: 2502
File is written successfully!

Ainsi que le fichier geojson avec les bornes manquantes.

En vérifiant les données avec JOSM je me rend compte que quelques points de bornes on une approximation des coordonnées géographiques qui font qu’elles sont souvent décalé (borne dans un bâtiment au lieu d’être sur un trotoir typiquement).

Existe-t-il des outils pour aider à corriger ce genre d’approximation automatiquement (ou semi-automatiquement) ?

J’aimerai affiner le fichier résultat avant de l’importer dans OSM. Si vous avez des avis sur la manière de procédé je suis preneur :slight_smile:. Merci !

Pour qu’un outil puisse servir ici automatiquement alors ça suppose l’existence de règles, que l’outil ne ferait qu’appliquer. Je pense à des règles comme : « la borne de tri est toujours à x mètres de la façade la plus proche », ou « la borne est toujours équidistante de 2 portes d’entrée » ou autre (exemples totalement fictifs, hein).
Donc soit de telles règles existent et on peut imaginer qu’un outil en automatise la prise en compte, soit on ne connaît pas de telles règles, et le bon positionnement relève non plus d’un process automatique mais de l’analyse et du repositionnement par un humain, au cas par cas. C’est ce qui ferait passer ta démarche d’un import à une intégration de données et c’est souvent préférable pour ajouter de la qualité et pas juste de la quantité.

3 « J'aime »

Complètement en accord avec ta dernière phrase. Merci d’avoir pris le temps de répondre.

Je vais essayé d’ajuster à la main les 2500 bornes de tri manquantes dans JOSM quand j’aurais un peu de temps et on verra quand j’en serais satisfait pour faire l’intégration des données.

Connais-tu Osmose ?

https://osmose.openstreetmap.fr/

Exemple avec des PAV: Osmose

Il faudrait injecter les données de Marseille dans osmose… qui a déjà tout le code de rapprochement, l’interface pour aider à l’intégration, des APi, etc…

Quels succès ces bornes d’apport volontaire ? C’est la troisième collectivité qui demande la même chose (les temps changements).

Voir ce que l’on peut déjà trouver sur le github d’Osmose : Incorporate glass containers · Issue #1780 · osm-fr/osmose-backend · GitHub

1 « J'aime »

Je recommande chaudement le plugin TODO List pour ce genre de passage en revue

1 « J'aime »

Je ne connaissais pas Osmose, je vais essayer de fouiller car pour l’instant je n’ai pas trop compris comment ça fonctionnait. Merci beaucoup.

Osmose = plusieurs composants

  • des « analyses » décentralisées, qui génèrent des listes d’anomalies et les envoient vers…
  • une base de données centrale, via…
  • une API, sur laquelle s’appuie aussi…
  • un front-end Web visible sur osmose.openstreetmap.fr

Tu peux :

  • compléter les sources de données utilisées par les analyses existantes (sûrement le mieux dans ton cas),
  • améliorer les algo des analyses existantes,
  • écrire tes propres analyses

Osmose c’est tout un ensemble de serveurs qui font tourner ces analyses, les remontent à la base centrale utilisée par les contributeurs via le front-end.

@frodrigo et @Jocelyn pourront t’en dire bien plus !

1 « J'aime »

Trop bien, merci pour les détails.

J’ai ouvert une PR pour continuer à discuter de ça sur le dépôt de OSMose :

Aucune idée de si cela convient pour avancer sur le sujet, mon script se limitait à la commune de Marseille, là dans l’analyser que j’ai rajouté concerne tous les PAVs de type “Biflux”, “Verre” et “Textile”.

Tous commentaires et aides pour continuer sur l’amélioration de ces données sont les bienvenues :slight_smile:. Merci !

salut @cquest,

maintenant que les données ont été intégrés à OSMose (PAV sur la métropole d’AMP), je suis pas trop sûr de comprendre comment corriger les données et les intégrer à OSM.

As-tu un petit pointeur à m’indiquer stp ?

Merci :slight_smile:

Sauf erreur de ma part, maintenant, c’est la loooongue procédure osmose : les personnes utilisant Osmose verront de nouveaux signalements dans leur zone de confort et les traiteront (en vérifiant sur place si possible). Petit à petit, tous tes PAV seront traités.

L’interface d’osmose te permet quand tu cliques sur un point de faire la correction immédiatement si c’est possible (fix-edit → penser à sauvegarder après, le bouton est en haut !) ou dans un éditeur externe (par exemple Id ou Josm si la télécommande est activée). Une fois le signalement corrigé, on peut appuyer sur la coche verte pour le faire disparaître tout de suite. Si c’est un faux positif (exemple : l’objet en question est déjà bien renseigné ou il n’y a pas de PAV à cet endroit), tu peux cliquer sur la croix rouge (faux-positif). Attention, l’un comme l’autre font disparaître le signalement pour tout le monde.

Plus de détails : FR:Osmose - OpenStreetMap Wiki

1 « J'aime »

Merci @JBout, je n’ai pas de lien « fix-edit » (même si je me suis connecté avec mon compte OSM) mais j’ai réussi à rajouter 4 PAVs grâce au lien « fix-josm ». Que le long travail de rapprochement OpenData →OSM commence !

Et merci à tout le monde de m’avoir indiqué l’existence de cet outil ultra-puissant qu’est osmose !

Cela dépend du type de modification proposée, le fix-edit, c’est quand on te propose une modification sur un élément déjà existant dans la base (par exemple corriger le name). Pour ajouter des POI, il faut passer par un éditeur extérieur.

2 « J'aime »

7 messages ont été scindés en un nouveau sujet : Comment intégrer de grands jeux de données avec vérifications sur le terrain