Listen to the article
Perchlorate, pesticides et leurs produits de dégradation (métabolites), polluants éternels (PFAS pour per- et polyfluoroalkylées), nitrates ou chlorure de vinyle monomère (CVM) : les Français ne connaissent pas l’état de l’eau potable qu’ils consomment, même si ces polluants sont surveillés par les autorités. La France a été mise en demeure par la Commission européenne, en juillet, de fournir au public « les informations obligatoires » sur la qualité de l’eau du robinet, mais à défaut d’action de l’Etat, ce sont Générations futures et Data for Good qui ont accompli cette tâche. Les deux associations ont réalisé un important travail de collection et d’agrégation des données officielles et publient sur un site dédié, jeudi 16 octobre, une carte interactive permettant de rechercher, pour chaque adresse postale, l’état de contamination de l’eau distribuée.
Aucun PFAS recherché
Au moins un PFAS quantifié sans dépassement
Dépassement de la limite recommandée par le HCSP**
Dépassement de la limite de qualité*
Dépassement de la limite sanitaire
`
} else {
document.querySelector(« #pfas-map .map-legend »).innerHTML = `
Aucune analyse non conforme
Moins de 25 % d’analyses non conformes
Entre 25 % et 50 % d’analyses non conformes
Entre 50 % et 75 % d’analyses non conformes
Plus de 75 % d’analyses non conformes
`
}
}
updateLegend();
// Watch buttons
document.querySelectorAll(« #pfas-map .lmui-tab »).forEach(btn => {
btn.onclick = (e) => {
dataVisible = e.target.id;
document.querySelector(« #pfas-map .lmui-tab_enabled »).classList.remove(« lmui-tab_enabled »);
e.target.classList.add(« lmui-tab_enabled »);
updateColors();
updateLegend();
}
});
// Watch flyto
document.querySelectorAll(« #pfas-map .flytobtn »).forEach(btn => {
btn.onclick = () => {
const place = btn.getAttribute(« data-attr »);
switch (place) {
case ‘reset’:
toggleLayerVisibility(‘hexagon’);
map.jumpTo({
center: mapSettings.center,
zoom: mapSettings.zoom,
});
break;
case ‘reunion’:
toggleLayerVisibility(‘overseas’);
map.jumpTo({
center: [55.558823, -21.109403],
zoom: 8,
});
break;
case ‘guyane’:
toggleLayerVisibility(‘overseas’);
map.jumpTo({
center: [-53.141910, 4.113978],
zoom: 6,
});
break;
case ‘antilles’:
toggleLayerVisibility(‘overseas’);
map.jumpTo({
center: [-61.235294, 15.125274],
zoom: 6.5,
});
break;
case ‘mayotte’:
toggleLayerVisibility(‘overseas’);
map.jumpTo({
center: [45.150284, -12.800424],
zoom: 9,
});
break;
default:
toggleLayerVisibility(‘hexagon’);
map.jumpTo({
center: mapSettings.center,
zoom: mapSettings.zoom,
});
break;
}
}
});
// Watch dalt
let daltModeBtn = document.querySelector(‘#pfas-map .toggle-color-mode’);
daltModeBtn.oninput = (e) => {
daltMode = e.target.checked ? ‘dalt’ : ‘def’;
//colors = getColors(daltMode);
updateColors();
}
const updateColors = () => {
const fillBilanDynamic = [
‘case’,
[‘==’, [‘get’, dataVisible], null], daltMode == ‘def’ ? COLOR_SCALE_RATIO[0] : COLOR_SCALE_RATIO_DALT[0],
[‘==’, [‘get’, dataVisible], 0], daltMode == ‘def’ ? COLOR_SCALE_RATIO[1] : COLOR_SCALE_RATIO_DALT[1],
[‘all’, [‘>’, [‘get’, dataVisible], 0], [‘<=’, [‘get’, dataVisible], 0.25]], daltMode == ‘def’ ? COLOR_SCALE_RATIO[2] : COLOR_SCALE_RATIO_DALT[2],
[‘all’, [‘>’, [‘get’, dataVisible], 0.25], [‘<=’, [‘get’, dataVisible], 0.50]], daltMode == ‘def’ ? COLOR_SCALE_RATIO[3] : COLOR_SCALE_RATIO_DALT[3],
[‘all’, [‘>’, [‘get’, dataVisible], 0.50], [‘<=’, [‘get’, dataVisible], 0.75]], daltMode == ‘def’ ? COLOR_SCALE_RATIO[4] : COLOR_SCALE_RATIO_DALT[4],
[‘>’, [‘get’, dataVisible], 0.75], daltMode == ‘def’ ? COLOR_SCALE_RATIO[5] : COLOR_SCALE_RATIO_DALT[5],
daltMode == ‘def’ ? COLOR_SCALE_RATIO[0] : COLOR_SCALE_RATIO_DALT[0]
];
const fillLastResultDynamic = [
‘match’,
[‘get’, dataVisible],
‘somme_20pfas_sup_0_1’,
colorScale(‘somme_20pfas_sup_0_1’, daltMode),
‘somme_20pfas_inf_0_1_et_4pfas_inf_0_02’,
colorScale(‘somme_20pfas_inf_0_1_et_4pfas_inf_0_02’, daltMode),
‘somme_20pfas_inf_0_1_et_4pfas_sup_0_02’,
colorScale(‘somme_20pfas_inf_0_1_et_4pfas_sup_0_02’, daltMode),
‘sup_valeur_sanitaire’,
colorScale(‘sup_valeur_sanitaire’, daltMode),
‘non_quantifie’,
colorScale(‘non_quantifie’, daltMode),
colorScale(‘non_recherche’, daltMode),
];
map.setPaintProperty(layerVisible, ‘fill-color’, dataVisible == « bilan_annuel_2025_pfas_ratio » ? fillBilanDynamic : fillLastResultDynamic);
updateLegend();
}
function setTooltipEvents() {
// Set tooltip mouse events
if (isMobile) {
map.on(‘click’, layerVisible, (e) => {
fillTooltip(e);
});
}
else {
map.on(‘mousemove’, layerVisible, (e) => {
fillTooltip(e);
if (isMobile) return;
const coordinates = e.features[0].geometry.coordinates.slice();
let x = e.lngLat.lng;
let y = e.lngLat.lat;
while (Math.abs(x – coordinates[0]) > 180) {
coordinates[0] += x > coordinates[0] ? 360 : -360;
}
if (!isMobile) {
const point = map.project([x, y]);
tooltip.style.transform = `translate(calc(-50% + ${point.x}px), calc(-100% + ${point.y – 6}px))`;
}
while (Math.abs(e.lngLat.lng – coordinates[0]) > 180) {
coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360;
}
});
}
map.on(‘mouseout’, layerVisible, (e) => {
onMouseOut();
});
}
function fillTooltip(e) {
document.querySelector(‘#pfas-map canvas’).style.cursor= »pointer »;
const allFeatures = map.queryRenderedFeatures(e.point);
const object = allFeatures.filter(feature => feature.layer.id === layerVisible);
if (object === undefined) return;
let content= » »;
if (object) {
const reseau = typeof object[0].properties[« nomreseaux »] != ‘undefined’ ? object[0].properties[« nomreseaux »] : »;
const commune = typeof object[0].properties[« commune_nom »] != ‘undefined’ ? object[0].properties[« commune_nom »] : »;
const resultat = typeof object[0].properties[dataVisible] != ‘undefined’ ? object[0].properties[dataVisible] : »;
let detail;
if (dataVisible === « dernier_prel_pfas_resultat ») {
detail = typeof object[0].properties[« dernier_prel_pfas_parametres_detectes »] != ‘undefined’ ? JSON.parse(object[0].properties[« dernier_prel_pfas_parametres_detectes »]) || » : »;
}
else if (dataVisible === « bilan_annuel_2025_pfas_ratio » && resultat > 0) {
detail = typeof object[0].properties[« bilan_annuel_2025_pfas_parametres_detectes »] != ‘undefined’ ? JSON.parse(object[0].properties[« bilan_annuel_2025_pfas_parametres_detectes »]) || » : »;
}
content += `
${layerVisible === « pfas-fill-udi » ? reseau : commune}
`;
}
// Fill tooltip
tooltip.querySelector(‘#pfas-map .protomaps-situ__tooltip-content’).innerHTML = content;
// Display and translate tooltip
if (isMobile) {
tooltip.style.display = « block »;
setTimeout(() => {
tooltip.style.transition = « transform 200ms »;
tooltip.style.transform = « translate(0, calc(-1 * var(–tooltip-offset))) »;
}, 50);
} else {
tooltip.style.display = « block »;
}
}
if (isMobile) {
document.querySelector(‘#pfas-map .lmui-tooltip__close’).onclick = () => {
onMouseOut();
}
}
setTooltipEvents();
});
function onMouseOut() {
document.querySelector(‘#pfas-map canvas’).style.cursor= »unset »;
// Display and translate tooltip
if (isMobile) {
tooltip.style.transition = « transform 200ms »;
tooltip.style.transform = « translate(0, var(–tooltip-offset)) »;
setTimeout(() => {
tooltip.style.display = « none »;
}, 200);
} else {
tooltip.style.display = « none »;
}
}
}
function defineMap17226095249139018(id = « default ») {
let bounds = [[-6.07191839651361, 40.888575238337665], [11.494249577791066, 51.30930029362327]];
const mapSettings = {
center: [2.711165590639098, 46.34652220567918],
zoom: 4,
minZoom: 4,
maxZoom: 15,
bearing: 0,
pitch: 0,
};
let marker = true;
let draw = false;
let user = false;
let geojsonMarker = {};
let geojsonDraw = {};
let geojsonUser = {};
let minimapDefined = false;
let zoomMinimap = 1;
// Launch
drawMap({
id,
mapSettings,
bounds,
marker,
geojsonMarker,
draw,
geojsonDraw,
user,
geojsonUser,
minimapDefined,
zoomMinimap
});
}
defineMap17226095249139018(« 17226095249139018 »);
La carte identifie, pour chaque type de polluant, les zones où les seuils de qualité ou les seuils de sécurité sanitaire ont été dépassés au cours des cinq dernières années, ainsi que par des dernières analyses conduites dans le cadre du contrôle sanitaire officiel. Chaque contaminant est soumis à un système de seuils qui lui est propre. Le dépassement des seuils de qualité, des valeurs réglementaires de précaution censées exclure les risques sanitaires, n’entraîne pas nécessairement d’effets délétères, tandis que le franchissement des seuils sanitaires – souvent bien plus élevés – indique un risque potentiel en cas d’exposition chronique.
Moyennant une dérogation octroyée par le préfet, une collectivité peut distribuer une eau non conforme aux critères de qualité pendant une durée de trois ans. Cette période est reconductible une seule fois : au terme de six années, les contaminants de l’eau doivent revenir dans le giron réglementaire. Quant au franchissement des seuils sanitaires, ils doivent théoriquement s’accompagner de mesures de restrictions de la consommation de l’eau distribuée – au moins pour les personnes sensibles (nourrissons, femmes enceintes, etc.).
Il vous reste 76.58% de cet article à lire. La suite est réservée aux abonnés.









6 commentaires
Utile, mais je reste sceptique sur l’exhaustivité des données. Certains polluants locaux pourraient-ils être sous-représentés ?
Enfin une solution pour vérifier facilement la qualité de l’eau chez soi ! Dommage que les associations aient dû prendre les devants sur ce sujet.
Une carte interactive pour visualiser les polluants dans l’eau potable, c’est une initiative plus que bienvenue ! Espérons qu’elle encouragera les autorités à agir plus rapidement pour protéger nos ressources.
Intéressant, mais pourquoi la France a-t-elle été mise en demeure par l’Europe pour ne pas fournir ces données plus tôt ? Une question de transparence ou de moyens ?
Vous avez vérifié votre adresse sur la carte ? Les résultats sont-ils alarmants dans votre région ?
Les PFAS et autres polluants dans l’eau potable sont inquiétants. J’espère que cette carte aidera les citadins à prendre conscience de la qualité de leur eau.