Skip to content

Compute OSM features + Cleanup #38

Open

Description

@Nicolas-Dmb

📋 Description

Après l'import OSM (#35), ce job calcule les indicateurs de pression humaine par zone H3 et les écrit dans osm_features_by_zone, puis supprime le schéma temporaire (osm_tmp_*). Mesures en EPSG:2154.

✅ Acceptance Criteria

  • DoD générales (logs JSON + sortie claire)
  • Déclenchement par timer systemd (pas de SQS : BioWatch n'utilise pas AWS). Le job traite les imports osm_import_snapshot en success dans job_runs qui n'ont pas encore été calculés.
  • Métriques par zone_id : building_area_ratio, road_density_major, road_density_all, urban_landuse_ratio
  • Calculs surfaces/longueurs en 2154 (stockage en 4326)
  • UPSERT dans osm_features_by_zone (+ job_run_zone_errors si partial)
  • Cleanup obligatoire du schéma osm_tmp_*
  • Couverture de tests ≥ 90%

🔗 Contrat avec l'import (#35)

Ce job lit job_runs, il n'y a pas de message :

Info Où la trouver
Imports à traiter job_runs avec job_name = osm_import_snapshot, status = success
Région scope (region:{aoi})
Bucket (annuel) bucket_id
Schéma à lire output_ref (ne pas reconstruire le nom : il est suffixé par la clé d'idempotence, osm_tmp_{aoi}_{bucket}_{clé})
source_version de l'import à enregistrer par #35 (output_ref en JSON {"schema": …, "source_version": …}, demandé dans la review de #94)
h3_res default_res de l'AOI
Environnement --env global / BIOWATCH_ENV (#18)

Tables fournies dans le schéma (EPSG:4326) :

  • buildings (building, polygones)
  • roads (highway, is_major, lignes)
  • landuse (landuse, polygones, déjà filtré sur l'urbain)

📐 Définitions (fixées à l'import par style.lua de #35, à valider avant de lancer les imports)

  • Route majeure (road_density_major) : motorway, trunk, primary, secondary et leurs *_link.
  • Toutes les routes (road_density_all) : routes ouvertes aux véhicules = les majeures + tertiary(_link), unclassified, residential, living_street, service. Sans chemins, pistes cyclables, trottoirs, pistes (path, footway, cycleway, track…).
  • Landuse urbain (urban_landuse_ratio) : residential, commercial, industrial, retail, construction, garages, railway, brownfield.
  • Bâtiment (building_area_ratio) : tout objet surfacique avec un tag building différent de no.

Ces listes sont appliquées à l'import et le schéma brut est supprimé après calcul : les changer impose de réimporter (incrément de STYLE_VERSION dans #35).

⚠️ Points d'attention pour le calcul

  • Chevauchements : fusionner (ST_Union) les polygones landuse et buildings par cellule avant de mesurer, sinon un ratio peut dépasser 1.
  • Unités : densités routières en m / km², ratios entre 0 et 1.
  • Qualité OSM variable dans le temps : OSM était moins complet en 2016. Une hausse entre années peut refléter de la cartographie ajoutée, pas de la construction. À documenter pour l'usage dans le score (dynamique temporelle).
  • Bords de région : une cellule à cheval sur deux extraits Geofabrik ne voit que les objets de l'extrait importé.
  • Performance (IDF : ~3,3 M bâtiments, 440 k routes, ~18 k cellules) : s'appuyer sur les index spatiaux créés par osm2pgsql, reprojeter les hexagones une seule fois.
  • source_version de osm_features_by_zone : combiner la version de l'import (snapshot + style) et la version du calcul de ce job.

🔗 Prerequisite Issues

⚠️ Dépendance DoR : « le schéma temporaire importé existe (osm_tmp_*) » :

⚠️ Autres DoR : zones_hex accessible, geo.metrics (2154), table osm_features_by_zone (UNIQUE(zone_id, bucket_id, source_version)) :


Source : Notion « Compute OSM features + Cleanup » (Prétraitements & Pipeline Data). Mis à jour le 06/11/2026 : déclenchement sans SQS, contrat avec #35, définitions des métriques.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions