BDNB — Base de Données Nationale des Bâtiments

32 M bâtiments CSTB : année de construction, matériaux, nombre de logements, usage. Croisés avec DVF par proximité spatiale.

Source et provenance

La BDNB est produite par le CSTB (Centre Scientifique et Technique du Bâtiment) sous Licence Ouverte 2.0 (Etalab). Elle est disponible librement sur data.gouv.fr et en téléchargement direct depuis le S3 CSTB.

Normi intègre le millésime 2025-07-a, publié en juillet 2025. Il couvre la France métropolitaine (96 départements, hors DOMTOM). Les données BDNB sont mise à jour annuellement par le CSTB.

La BDNB regroupe les bâtiments en "groupes de bâtiments" (batiment_groupe) : un ensemble de bâtiments contigus formant une unité fonctionnelle. Un immeuble Haussmannien compte comme un groupe, même s'il est composé de plusieurs bâtiments physiques adjacents.

Couverture

32,2 M
Bâtiments
16,8 M
Matchés avec DVF
96
Départements
2025-07-a
Millésime
Ouverte 2.0
Licence
EPSG:2154
Source géom.

Jointure DVF × BDNB

Normi relie chaque transaction DVF au bâtiment BDNB le plus proche par proximité spatiale KNN (k=1, distance ≤ 200 m). L'algorithme est identique à celui utilisé pour la jointure DVF×DPE : tri binaire par latitude par département, puis filtrage par fenêtre de longitude (~200 m), puis calcul Haversine exact.

Une transaction sans correspondance BDNB à moins de 200 m n'est pas matchée (environ 0,5% des transactions). Le champ match_distance_m indique la distance exacte de correspondance — une valeur > 50 m peut indiquer une imprécision de géolocalisation DVF ou un bâtiment démoli/reconstruit.

La jointure a été réalisée localement en Python/numpy en 22 minutespour 17 M×32 M paires — équivalent à 30h+ en Postgres (KNN sur géographie).

Géométrie

Les polygones BDNB sont fournis en Lambert 93 (EPSG:2154) sous forme de WKT MultiPolygon. Normi calcule le centroïde de chaque polygone et le reprojette en WGS84 (EPSG:4326) via shapely + pyproj. Les coordonnées latitude / longitude dans bdnb_batiments sont ces centroïdes reprojetés.

Champs exposés

La table bdnb_batiments est une dénormalisation de 4 tables sources BDNB, jointurées sur batiment_groupe_id.

ChampTypeDescription
batiment_groupe_idstringIdentifiant BDNB unique du groupe de bâtiments (ex. bdnb-bg-XXXX-XXXX-XXXX)
code_commune_inseestringCode INSEE de la commune (5 chiffres)
libelle_communestringNom de la commune en majuscules
latitude / longitudenumberCentroïde du polygone de bâtiment reprojeté en WGS84 (EPSG:4326)
annee_constructionnumberAnnée de construction (source FFO/BD TOPO)
nb_logementsnumberNombre de logements dans le groupe de bâtiments
nb_etagesnumberNombre de niveaux
mat_murstringMatériau des murs extérieurs (PIERRE, BRIQUES, BÉTON, etc.)
mat_toitstringMatériau de toiture (TUILES, ARDOISES, ZINC, etc.)
usage_principalstringUsage BDNB : Résidentiel collectif, Résidentiel individuel, Tertiaire, Mixte…
usage_niveau_1stringClassification FFO de niveau 1
dvf_nb_mutationsnumberNombre de mutations DVF 2014–2021 pré-jointures par BDNB
dvf_prix_m2_mediannumberPrix médian/m² agrégé par BDNB sur 2014–2021

Tables sources (4 sur ~50)

Normi extrait uniquement 4 tables des ZIPs BDNB par département :

  • batiment_groupe.csv — identifiant, géométrie Lambert 93, commune
  • batiment_groupe_ffo_bat.csv — année, matériaux, nb logements (source FFO/BD TOPO)
  • batiment_groupe_dvf_open_statistique.csv — stats DVF agrégées 2014–2021 pré-calculées par CSTB
  • batiment_groupe_synthese_propriete_usage.csv — usage principal BDNB

Les autres tables (DPE, parcelles, relations, etc.) ne sont pas chargées dans Normi mais restent disponibles dans les ZIPs CSTB originaux.

Endpoints disponibles

  • API REST BDNB — 4 endpoints : contexte bâtimentaire, stats par âge, score rénovation, stock commune
  • Outils MCP BDNB — get_building_context, get_age_adjusted_stats, get_renovation_score, get_bdnb_stats