Skip to content

fix(duckpipe): keep web choropleths polygonal after GDAL rounding - #10

Merged
glopez-dev merged 1 commit into
mainfrom
fix/web-geojson-geometry-collections
Jul 9, 2026
Merged

fix(duckpipe): keep web choropleths polygonal after GDAL rounding#10
glopez-dev merged 1 commit into
mainfrom
fix/web-geojson-geometry-collections

Conversation

@glopez-dev

Copy link
Copy Markdown
Contributor

Problème

Sur la carte « Qualité de vie », la Nouvelle-Aquitaine s'affichait « Pas de donnée » alors que ses agrégats régionaux sont corrects (stats/regions.json : score_median 0.437, 2457 communes scorées).

Cause racine

L'option COORDINATE_PRECISION passée au driver GeoJSON de GDAL dans _copy_geojson arrondit les coordonnées à l'écriture : les îles plus petites que la grille s'effondrent en Point/LineString dégénérés et GDAL emballe la feature dans une GeometryCollection. Sur le run publié 2026-07-08 : 3 régions (52, 75, 76), 26 départements en low, 21 en mid. Seule la Nouvelle-Aquitaine avait une collection doublement imbriquée que le front ne rend pas du tout.

Correctif

Réparation post-écriture dans _copy_geojson (entonnoir unique de tous les GeoJSON web) : reconstruction de Polygon/MultiPolygon à partir des parties polygonales, artefacts d'effondrement écartés.

L'alternative « pré-arrondi SQL » (ST_ReducePrecision + ST_CollectionExtract) a été testée et rejetée : elle vide la géométrie de 7 communes réelles à la précision mid (dont Saint-Jean-Cap-Ferrat).

Tests

  • tests/test_publish_web.py : repro déterministe du collapse GDAL (carré + île sous la grille), cas réel de collection imbriquée, contrats de réparation.
  • e2e : garde-fou « Polygon/MultiPolygon uniquement » sur les choroplèthes publiées + la région 75 doit avoir géométrie et score non nuls.

Validé en rejouant l'export sur le regions-1000m.geojson Etalab réel : plus aucune GeometryCollection, la région 75 redevient un MultiPolygon de 755 points.

GDAL's COORDINATE_PRECISION collapses islands smaller than the grid into
degenerate points/linestrings and wraps the feature in a GeometryCollection
(nested for Nouvelle-Aquitaine), which the webapp cannot render: the region
showed as 'no data' despite having aggregated scores. Repair written GeoJSON
by rebuilding Polygon/MultiPolygon from the polygonal parts and dropping
collapse artifacts, and guard all published choropleth layers in the e2e
test.
@glopez-dev
glopez-dev merged commit 30ad7a6 into main Jul 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant