Documentation

Comment nous évaluons chaque adresse.

Neuf métriques, calculées hors ligne à partir de huit registres de données ouvertes. Chaque distance est routée via OSRM — des minutes réelles de marche ou de conduite, pas des lignes droites. Les scores sont agrégés en segments de 20 adresses pour la conformité RGPD.

§ 01 — Modèle de notation

Neuf dimensions d’habitabilité.

Chaque adresse luxembourgeoise est évaluée sur neuf métriques indépendantes, chacune sur une échelle de 0 à 100. Le score global est une moyenne pondérée : aucune métrique ne peut masquer une faiblesse critique. En dessous de 40, la note est E ; au-dessus de 90, A+. La pondération reflète l’importance de chaque dimension au quotidien — la marchabilité et les transports en commun pèsent le plus.

Génération des itinéraires

Deux instances OSRM locales tournent pendant le pipeline hors ligne. Le profil piéton (port 5001) sert à la marchabilité, l’adapté aux enfants et la vitalité — en respectant les chemins piétons, passages et sens uniques à ~4,5 km/h. Le profil voiture (port 5002) gère l’accès voiture — en tenant compte des restrictions de virage, de la hiérarchie routière et du temps de conduite réel plutôt que de la distance à vol d’oiseau.

Toutes les durées d’itinéraire sont mises en cache dans SQLite, indexées sur des coordonnées arrondies (~1,1 m de précision).

Notation tenant compte de la diversité

Pour chaque catégorie de POI, nous routons vers les 4 candidats les plus proches. Le plus proche contribue 66 % du score de catégorie, le 2e 17 %, le 3e 11 % et le 4e 6 %. Cela récompense les quartiers avec plusieurs options — pas un seul supermarché, mais trois à distance de marche. Les POI à moins de 2 minutes reçoivent un bonus de 10 % ; au-delà de 7 minutes, la contribution décroît de façon exponentielle avec une constante de 7 minutes.

En détail : pourquoi un seul supermarché ne suffit pas →
01

Marchabilité

poids global: 1.2

Évalue la facilité avec laquelle les courses quotidiennes peuvent être effectuées à pied. Pour chaque catégorie, nous identifions les 4 POI les plus proches dans un rayon de 2 km et calculons l’itinéraire piéton OSRM. Le plus proche contribue 66 % du score de catégorie, avec des rendements décroissants pour les rangs 2–4. Les POI à moins de 2 minutes bénéficient d’un bonus de 10 % ; au-delà de 7 minutes, la contribution décroît de façon exponentielle.

score = Σ(slot_weight × poi_contribution) × category_weight
CatégorieTags OSMPoids
Supermarchéshop=supermarket, shop=convenience2.0
Boulangerieshop=bakery1.5
Pharmacieamenity=pharmacy1.5
Médecin généralisteamenity=doctors1.2
Bureau de posteamenity=post_office1.0
Banqueamenity=bank1.0
02

Adapté aux enfants

poids global: 1

Évalue l’adéquation d’un quartier pour les familles avec enfants. Les écoles sont divisées en primaire (poids supérieur) et secondaire. Les parcs doivent être nommés et mesurer au moins 500 m² pour exclure les jardins privés. La correspondance pédiatre inspecte le tag healthcare:speciality. Même notation tenant compte de la diversité que la marchabilité.

Same slot-weight formula as walkability, with child-specific category weights.
CatégorieTags OSMPoids
Crèche / maison relaisamenity=kindergarten, amenity=childcare2.0
École primaireamenity=school (isced:level 0–1)1.8
École secondaireamenity=school (isced:level 2–3)1.0
Pédiatreamenity=doctors + healthcare:speciality=paediatrics1.2
Aire de jeuxleisure=playground1.5
Parcleisure=park (named, ≥500 m²)1.0
03

Accès voiture

poids global: 0.8

Évalue la proximité des échangeurs autoroutiers via un routage OSRM voiture réel — pas la distance à vol d’oiseau. Le sous-score voiture représente 90 % du total (décroissance exponentielle avec τ=5 min pour l’échangeur le plus proche, bonus de densité pour plusieurs échangeurs, et proximité station-service). Les 10 % restants proviennent de la proximité des bornes de recharge VE, notée avec le même système tenant compte de la diversité via distances routées voiture dans un rayon de 10 km.

score = 0.90 × car_score + 0.10 × ev_score
CatégorieTags OSMPoids
Échangeur autoroutierhighway=motorway_junction0.60 (primary)
Station-serviceamenity=fuel0.15 (bonus)
Borne de recharge VEamenity=charging_station0.10 (EV sub-score)
04

Transports en commun

poids global: 1.2

Somme les contributions pondérées par la proximité de tous les arrêts de transport dans le rayon. La contribution de chaque arrêt est proportionnelle au nombre de lignes desservies (parsé depuis le tag OSM route_ref). Les arrêts de tram reçoivent un multiplicateur 2× par rapport aux bus. Les gares contribuent 3× hors Luxembourg-Ville mais 0× à l’intérieur (codes postaux 1000–2999), car les résidents urbains se déplacent principalement vers l’extérieur et sont mieux desservis localement par bus/tram.

score = min(10, Σ exp(-d/decay) × multiplier × lines_factor)
CatégorieTags OSMPoids
Garerailway=station, railway=halt3× (outside city)
Arrêt de tramrailway=tram_stop2× × lines
Arrêt de bushighway=bus_stop1× × lines
05

Risque d’inondation

poids global: 1

Vérification binaire d’appartenance aux zones officielles de risque d’inondation fluviale de data.public.lu. Les coordonnées sont reprojetées en EPSG:2169 (LUREF) et testées contre un index spatial Shapely STRtree. HQ10 correspond à une période de retour de 10 ans (risque le plus élevé) ; HQext au scénario extrême (risque le plus faible). Seules les crues fluviales sont actuellement couvertes.

score = {high: 20, medium: 50, low: 75, none: 100}
CatégorieTags OSMPoids
HQ10 (risque élevé)data.public.lu flood polygonscore: 20
HQ100 (risque moyen)data.public.lu flood polygonscore: 50
HQext (risque faible)data.public.lu flood polygonscore: 75
Hors de toutes les zonesscore: 100
06

Sécurité

poids global: 1.2

Combine la densité locale de délits (incidents dans 1 km sur une fenêtre glissante de 12 mois) avec une référence communale à 10 % de poids. Le signal communal est plafonné à 10 incidents effectifs pour éviter que les grandes communes ne dominent la lecture locale. Les données au niveau de la rue sont supprimées en dessous de 5 incidents par an pour la protection de la vie privée. Catégories : cambriolage, vol, circulation, stupéfiants, violence et divers.

score = max(20, 100 - min(80, local + commune×0.1) × 0.9)
CatégorieTags OSMPoids
Incidents locauxpolice.public.lu (1 km radius)primary signal
Référence communalepolice.public.lu (commune-wide)10% weight, capped at 10 eff.
07

Vitalité

poids global: 0.6

Mesure l’animation du quartier de jour (restaurant, café) comme de nuit (bar, boîte de nuit, pub). Le dossier inclut des sous-scores séparés pour le jour et la nuit pour une comparaison plus fine. Une vitalité élevée (≥85) déclenche une pénalité croisée sur l’adapté aux enfants, reflétant la tension réelle entre vie nocturne et convenance familiale.

Same variety-aware slot-weight scoring. Sub-scores computed with daytime-only and nightlife-only category subsets.
CatégorieTags OSMPoids
Restaurantamenity=restaurant1.2
Caféamenity=cafe1.0
Boîte de nuitamenity=nightclub2.0
Baramenity=bar1.5
Pubamenity=pub1.2
Restauration rapideamenity=fast_food0.4
08

Planification urbaine

poids global: 1.5

Fusionne environnement et zonage en un seul score Urbanisme & Environnement. Le sous-score environnement (55 % du poids) commence à 100 et soustrait des pénalités pour les nuisances à proximité — routes, voies ferrées, zones industrielles, infrastructures électriques et contours de bruit du Findel (décroissance quadratique). Le sous-score zonage (45 % du poids) combine le ratio d’espaces verts dans 500 m et la pression de densification des zones PAG environnantes. Plus d’espaces verts, moins de potentiel de développement et moins de nuisances environnementales = score plus élevé.

score = 0.55 × environment_score + 0.45 × zoning_score
CatégorieTags OSMPoids
Autoroutehighway=motorway30 pts / 300 m
Route nationalehighway=trunk20 pts / 200 m
Voie ferréerailway=rail25 pts / 150 m
Zone industriellelanduse=industrial15 pts / 300 m
Ligne haute tensionpower=line (≥110 kV)12 pts / 200 m
Bruit aéroportuaireLden contour polygons10–55 pts by band
Ratio d’espaces vertsgeoportail PAG Features API (500 m buffer)60% of zoning
Pression de densificationgeoportail PAG zone types (28 categories)40% of zoning (inverted)
09

Potentiel solaire

poids global: 0.6

Estime la quantité de lumière directe du soleil qu’un bâtiment reçoit au cours de l’année. Combine les modèles de surface et de terrain LiDAR avec une simulation de trajectoire solaire pour calculer l’irradiance annuelle à chaque adresse. Les façades orientées au sud avec un ombrage minimal des structures voisines obtiennent le meilleur score. La métrique aide à identifier les appartements avec un bon éclairage naturel et un potentiel pour les panneaux solaires.

score = solar_irradiance_normalized × orientation_factor
CatégorieTags OSMPoids
Exposition solaireLiDAR DSM + sun path modelprimary signal

Ajustements inter-métriques

Après le calcul individuel des métriques au niveau du segment, cinq règles d’ajustement croisé s’appliquent. Elles captent les interactions réelles — une vie nocturne intense n’est pas idéale pour les enfants, un faible sentiment de sécurité réduit l’attrait de la marchabilité. Les pénalités sont soustraites du score de la métrique cible.

ConditionPénaliseFormuleJustification
Vibrancy ≥ 85Kid-Friendly(score − 85) × 0.5Une vie nocturne intense à proximité est un point négatif pour les familles avec jeunes enfants.
Safety < 85Kid-Friendly(85 − score) × 0.3Une sécurité inférieure à la médiane impacte directement la convenance pour les enfants.
Urban & Env. (env sub-score) < 65Kid-Friendly(65 − score) × 0.3Une mauvaise qualité de l’air ou du bruit pénalise l’adapté aux enfants.
Urban & Env. (env sub-score) < 50Walkability(50 − score) × 0.2Des nuisances environnementales sévères rendent la marche moins agréable ou sûre.
Safety < 60Walkability(60 − score) × 0.2Un faible sentiment de sécurité réduit la valeur des commodités accessibles à pied.
§ 02 — Registres de données

Sept registres ouverts, zéro flux propriétaire.

Wunnscheck repose exclusivement sur des données publiques. Pas d’API propriétaire, pas de flux payants, pas de portails d’annonces. Chaque source ci-dessous est librement accessible, auditable de façon indépendante, et actualisée selon une cadence fixe pour que le pipeline de notation ne dérive jamais de la réalité terrain.

Actualisation hebdomadaire

OpenStreetMap (Geofabrik PBF)

L’épine dorsale du pipeline. L’extrait PBF du Luxembourg fournit chaque POI (supermarchés, pharmacies, écoles, arrêts de bus, bornes de recharge, bars, etc.), les emprises de bâtiments pour la vue carte, et le réseau complet route/rail/tram utilisé par les deux profils OSRM et le détecteur de nuisances environnementales. ~170 000 adresses et ~14 000 POI après filtrage.

download.geofabrik.de/europe/luxembourg
Actualisation annuelle

data.public.lu — Zones inondables

Polygones officiels de risque d’inondation fluviale publiés par l’Administration de la gestion de l’eau. Trois niveaux de sévérité : HQ10 (période de retour 10 ans, risque le plus élevé), HQ100 (100 ans) et HQext (scénario extrême). Coordonnées en EPSG:2169 (LUREF). Chargés dans un index spatial Shapely STRtree pour des requêtes point-dans-polygone rapides.

data.public.lu
Actualisation annuelle

data.public.lu — Bruit aéroportuaire du Findel

Polygones de contours de bruit Lden (pondéré jour-soir-nuit) autour de l’aéroport Luxembourg-Findel. Cinq bandes de 55–59 dB à ≥75 dB, chacune avec une pénalité croissante dans le score environnement. Coordonnées en EPSG:3035 (ETRS-LAEA) — le point de requête est reprojeté, pas les polygones.

Actualisation bimensuelle

police.public.lu

Articles de faits divers du fil d’actualité public de la Police grand-ducale, extraits et géocodés par commune. Catégories : cambriolage, vol, circulation, stupéfiants, violence, arrestation, appel à témoins et divers. Fenêtre glissante de 12 mois. Les comptages au niveau de la rue sont supprimés en dessous de 5 incidents pour la vie privée. Le géocodage est basé sur regex contre les noms de communes — pas au niveau des coordonnées.

police.public.lu/fr/actualites
Actualisation hebdomadaire

data.public.lu — GTFS (transports publics)

Flux GTFS officiel du Luxembourg publié par Mobilitéit.lu. Fournit le nombre exact de lignes et les fréquences de départ pour chaque arrêt de bus, tram et train du pays. Utilisé pour la métrique transport public au lieu des tags OSM route_ref peu fiables. Analysé depuis calendar.txt (horaires idéalisés par jour de semaine — évite la pollution des jours fériés). Rafraîchi chaque semaine.

data.public.lu/gtfs
Via Geofabrik PBF

Cadastre / registre d’adresses

~170 000 adresses luxembourgeoises avec coordonnées, issues du PBF Geofabrik. Fournit le code postal, le nom de rue, le numéro de maison, la localité et l’emprise du bâtiment pour chaque adresse du pays. C’est la table de base contre laquelle tous les scores sont calculés.

Reconstruit chaque semaine avec le PBF

OSRM (instances locales)

Deux instances OSRM locales — profil piéton sur le port 5001, profil voiture sur le port 5002 — construites à partir du même PBF Luxembourg. Utilisées exclusivement pendant le pipeline hebdomadaire hors ligne ; aucun processus OSRM ne tourne au moment des requêtes. Les temps de marche/conduite sont mis en cache dans SQLite.

§ 03 — Zones de développement

Comment nous mesurons ce qui est bâti et ce qui arrive.

L'analyse des zones de développement cartographie chaque zone PAG du pays, mesure les hauteurs réelles des bâtiments par LiDAR et les compare aux autorisations du plan de zonage. Le résultat est un ratio d'utilisation par zone qui révèle où le Luxembourg est pleinement construit et où il reste de la marge.

Sources de données

  • Zonage PAG de Geoportail.lu (Plan d'Aménagement Général) — le plan de zonage juridiquement contraignant que chaque commune doit publier.
  • GeoPackage national PAG de data.public.lu — 18 732 polygones ZONES_QE sur les 94 communes. Fournit les codes de catégorie de zone, les lettres de sous-secteur et les hauteurs de corniche autorisées.
  • Relevé LiDAR 2024 de data.public.lu — rasters DSM (Modèle Numérique de Surface) et DTM (Modèle Numérique de Terrain) à 1 m de résolution, couvrant l'ensemble du pays.
  • Registre d'adresses OSM — 170 384 adresses avec coordonnées, utilisé pour distinguer les zones bâties des terrains vides.
  • Zones ZAD (zones d'aménagement différé) et zones ZPH (zones de priorité d'habitation) — des désignations spéciales qui indiquent une pression de développement futur ou des exigences de priorité au logement.

Méthodologie

Catégories de zones : HAB-1, HAB-2, MIX-u/c/v/r, ECO-c1/c2/r/n, COM — chacune correspond à un type d'usage du sol (résidentiel, mixte, économique, commercial) avec des hauteurs autorisées par défaut différentes.

Hauteur des bâtiments : le DSM LiDAR moins le DTM donne la hauteur au-dessus du sol en chaque point. Nous échantillonnons la zone sur une grille de 12 m et prenons le P75 (75e percentile) comme hauteur représentative — robuste contre les valeurs aberrantes d'antennes ou de cheminées.

En dessous de 2,5 m = végétation ou abris, pas des bâtiments. Les zones où le P75 tombe sous ce seuil sont classées comme non développées, quels que soient les autres signaux.

Estimation des étages : 3,5 m par étage, la norme luxembourgeoise. Un P75 de 10,5 m se traduit par 3 étages estimés.

Hauteur autorisée : dérivée des lettres de sous-secteur attribuées par le PAP (Plan d'Aménagement Particulier) de chaque commune. Les lettres vont de a (6 m, ~2 étages) à j (28 m, ~8 étages). Quand le GeoPackage inclut le code de sous-secteur, nous utilisons sa hauteur de corniche ; sinon nous appliquons les valeurs par défaut de la catégorie (p.ex. HAB-1 = 7 m, HAB-2 = 10 m).

Les zones avec 0 adresse OSM sont forcées au statut non développé — même si le LiDAR détecte une certaine hauteur, un secteur sans adresses enregistrées n'est pas significativement bâti.

Ratio d'utilisation : étages bâtis divisés par étages autorisés. Une zone avec 3 étages bâtis sur 6 autorisés a une utilisation de 50 %.

Niveaux de développement : 0 (vide — aucun bâtiment détecté), 1 (sous-développé — moins de 33 % d'utilisation), 2 (partiel — 33 % à 66 %), 3 (pleinement bâti — plus de 66 %).

Intersection ZAD/ZPH : chaque zone est croisée spatialement avec les polygones ZAD et ZPH via un index STRtree Shapely. Les zones situées dans une ZAD sont signalées comme zones de développement futur ; les zones dans une ZPH comme priorité d'habitation.

Limites

  • 33 % des zones ne correspondent pas au GeoPackage national — elles reçoivent les valeurs par défaut de catégorie au lieu des hauteurs spécifiques par sous-secteur communal.
  • Les adresses OSM sont incomplètes. Certaines zones rurales peuvent paraître plus vides qu'elles ne le sont.
  • Le P75 LiDAR est approximatif. Des structures inhabituellement hautes (églises, silos) peuvent gonfler les relevés pour les petites zones.
  • Le texte des PAP communaux n'est pas analysé. Seul le code de sous-secteur lisible par machine du GeoPackage est utilisé ; les amendements textuels ou exceptions dans les documents PAP individuels ne sont pas pris en compte.
Sources : Geoportail.lu · data.public.lu (GeoPackage PAG, LiDAR 2024) · OSM (registre d'adresses)
§ 04 — Vie privée

Conforme au RGPD par conception.

Posture RGPD

Toutes les données de notation proviennent de données ouvertes publiques (OSM, registres gouvernementaux, fil police). La sortie décrit des lieux, pas des personnes. Lors d’un achat, nous stockons votre adresse e-mail pour la livraison des crédits et la connexion OTP. Les codes postaux des dossiers consultés sont enregistrés pour le contrôle des crédits. Nous utilisons Supabase (hébergé dans l’UE) pour le stockage et Stripe pour les paiements. Aucune analyse d’impact (article 35 RGPD) n’est requise car la notation concerne des lieux, pas des individus.

Stockage des données et traçage

Aucun script d’analytique, aucun pixel de suivi, aucun identifiant publicitaire. Stockage côté client : un cookie de préférence linguistique (ws.lang) et les scénarios de recherche sauvegardés dans le localStorage. Après achat, votre e-mail et solde de crédits sont stockés dans notre base de données (Supabase, UE). Des compteurs de limitation de débit suivent l’utilisation par hash d’IP. Nous ne vendons ni ne partageons aucune donnée avec des tiers.

Agrégation par segment

Le pipeline calcule les scores pour chaque adresse individuelle, mais les résultats publics sont agrégés en segments de 20 numéros. Cela empêche quiconque de reconstituer le score d’un ménage unique. Les comptages de délits utilisent un seuil de suppression supplémentaire de 5 incidents par an avant qu’un nom de rue ne soit affiché. La vérité terrain par adresse est stockée localement dans SQLite à des fins d’audit uniquement — elle ne quitte jamais le pipeline.

Conforme CNPD · agrégation par segment · pas de traçage tiers · données hébergées dans l’UE