# Branchement BDNB dans le POC foncier narratif

## Objectif

La table BDNB ajoutée dans PostGIS peut servir à trois choses :

1. afficher de vrais polygones de bâtiments au lieu des parcelles issues des Fichiers fonciers ;
2. croiser les bâtiments BDNB avec les parcelles Fichiers fonciers pour récupérer une année d'apparition ;
3. préparer une visualisation 3D avec le champ `hauteur`.

## Champs BDNB attendus

Le script `sql/20_setup_bdnb_polygones.sql` part des champs visibles dans la table importée :

- `fid`
- `batiment_construction_id`
- `batiment_groupe_id`
- `code_departement_insee`
- `code_iris`
- `code_commune_insee`
- `s_geom_cstr`
- `hauteur`
- `altitude_sol`
- `fictive_geom_cstr`
- `geom` ou autre colonne géométrique à adapter dans le script

## Tables / vues créées

Le script crée :

```text
foncier_poc.v_bdnb_batiments
foncier_poc.v_bdnb_ff_croisement
foncier_poc.v_batiments_historique_bdnb_ff
foncier_poc.v_controle_bdnb_ff
foncier_poc.v_controle_bdnb_ff_par_commune
```

La vue la plus importante pour l'application est :

```text
foncier_poc.v_batiments_historique_bdnb_ff
```

Elle respecte le contrat attendu par le POC :

```text
id_batiment
geom
code_insee
commune
code_territoire
nom_territoire
annee_apparition
surface_emprise_m2
usage
poids_bati
hauteur_m
altitude_sol_m
source_annee
qualite_annee
```

## Logique de croisement avec les Fichiers fonciers

Le croisement se fait ainsi :

```text
bâtiment BDNB
→ point intérieur du bâtiment
→ parcelle Fichiers fonciers contenant ce point
→ récupération de l'année d'apparition, de l'usage et des informations FF
```

Ce choix évite les doublons qui apparaissent avec un simple `ST_Intersects`, notamment quand un bâtiment touche plusieurs parcelles.

## Configuration .env conseillée

Pour utiliser les géométries BDNB dans la carte principale :

```env
FONCIER_SCHEMA=foncier_poc
FONCIER_BUILDINGS_VIEW=v_batiments_historique_bdnb_ff
FONCIER_TERRITORIES_VIEW=v_territoires
FONCIER_GEOM_COL=geom
FONCIER_COUNT_COL=

FONCIER_BDNB_VIEW=v_batiments_historique_bdnb_ff
FONCIER_BDNB_HEIGHT_COL=hauteur_m
FONCIER_BDNB_YEAR_COL=annee_apparition
```

Si tu utilises la vue matérialisée pour les performances :

```env
FONCIER_BUILDINGS_VIEW=mv_batiments_historique_bdnb_ff
FONCIER_BDNB_VIEW=mv_batiments_historique_bdnb_ff
```

## Contrôles à lancer dans pgAdmin

```sql
SELECT * FROM foncier_poc.v_controle_bdnb_ff;
```

```sql
SELECT *
FROM foncier_poc.v_controle_bdnb_ff_par_commune
ORDER BY nb_batiments_bdnb DESC
LIMIT 20;
```

```sql
SELECT
    annee_apparition,
    count(*) AS nb_batiments
FROM foncier_poc.v_batiments_historique_bdnb_ff
GROUP BY annee_apparition
ORDER BY annee_apparition;
```

## Affichage 3D

Le prototype contient une page 3D simple :

```text
http://127.0.0.1:8000/3d?territoire=62001&niveau=commune&year=2025
```

Elle interroge :

```text
/api/bdnb/buildings3d?territoire=62001&niveau=commune&year=2025
```

La hauteur d'extrusion vient du champ :

```text
hauteur_m
```

Pour une démonstration locale ou communale, le GeoJSON suffit. Pour un EPCI complet ou toute l'agence, il faudra passer à des tuiles vectorielles ou PMTiles afin de garder une bonne fluidité mobile.

## Limites à afficher dans l'interface

Formulation recommandée :

> Les polygones BDNB permettent une lecture plus fine du bâti et une visualisation 3D à partir du champ hauteur. L'année d'apparition reste issue du croisement avec les Fichiers fonciers à la parcelle ; elle doit donc être interprétée comme une approximation documentée, pas comme une date certaine de chaque bâtiment.

