# Format « KML Chantier » v1 — entrée standard du moteur 3D Windfarm Visualizer

Un fichier `.kml` (ou `.kmz`) lu tel quel par le moteur, sans règle par site. La sémantique est portée **uniquement par le nom des
dossiers** (`<Folder><name>`), en MAJUSCULES sans accent. Tout dossier inconnu est ignoré. Coordonnées en WGS 84 (lon, lat), comme
tout KML. Les altitudes des coordonnées sont ignorées : le relief vient du MNT IGN.

## Paramètres du site (obligatoire)
Dans `<Document><description>`, un bloc JSON (entre ```` ```json ```` et ```` ``` ```` ou brut) :

```json
{
  "id": "arnac",
  "title": "Ferme éolienne d'Arnac-sur-Dourdou",
  "subtitle": "Arnac · V117 · 6 éoliennes · 150 m",
  "machine": { "rotor": 117, "tip": 150, "hub_diameter": 3 },
  "entry": { "ref": "D12", "edge": "south" },
  "transport": "bladelifter",
  "crane": "LTM1650",
  "craneAssembly": false,
  "earthworks": { "maxSlope": 0.10, "verticalRadius": 200, "crossfall": 0.02, "talus": 2.5 },
  "camera": { "focus": "E03" }
}
```
- `entry.ref` : numéro de la route d'arrivée des convois (`D12`, `D 67`…) ; `entry.edge` : bord par lequel ils arrivent
  (`north|south|east|west`). Si la route ne franchit pas ce bord, le moteur part de son extrémité située de ce côté.
- `transport` : `trailer` (pales sur remorque, stockées au sol) ou `bladelifter` (pales à 45°, prises sur le camion, sans stockage).
- `crane` : `LG1750` (treillis, montage de la flèche au sol si `craneAssembly` = true) ou `LTM1650` (télescopique).
- `earthworks` : pente longitudinale maxi des pistes, rayon vertical (m), dévers maxi, pente des talus (1:n).
- Valeurs par défaut si absent : machine V117 150 m, `trailer`, `LG1750`, montage au sol, 10 % / 200 m / 2 % / 1:3.

## Dossiers et géométries

| Dossier | Géométrie | Contenu | Obligatoire |
|---|---|---|---|
| `EMPRISE` | 1 polygone | Zone à modéliser (4 à 6 km de côté conseillé). Sinon : boîte englobante du plan + 800 m. | non |
| `EOLIENNES` | points | Un point par machine, `name` = `E01`, `E02`… Données étendues facultatives `z_tn`, `z_beton` (m NGF). | **oui** |
| `BYPASS` | polygones | Aire de contournement autour du massif. Si présente, l'axe de la machine est recentré sur le bypass le plus proche. | non |
| `PLATEFORMES` | polygones | Plateforme de montage (à 0 %). Le moteur prend, par machine, la plus grande à moins de 70 m de l'axe. | **oui** |
| `PISTES` | polygones ou lignes | Surface roulable. Une ligne = axe de piste ; donnée étendue `largeur` (m, défaut 5). | **oui** |
| `RETOURNEMENTS` | polygones | Aires de demi-tour : roulables et à plat. | non |
| `STOCKAGE_PALES` | polygones (rectangle) | Zone de stockage des pales, **jamais roulable**, à plat, dessinée à côté de la plateforme. Les 3 pales y sont posées dans la longueur, emplanture côté plateforme. Absente : la machine passe en livraison juste à temps (les pales sont prises sur le camion). | non |
| `PALES_STOCKEES` | lignes à 2 points | Une ligne par pale stockée : **1er point = emplanture, 2e point = pointe**. Sinon le moteur place 3 pales dans la zone de stockage. | non |
| `AIRE_GRUE` | polygones (rectangle) | Axe de montage de la flèche de la grue principale. La grue se cale **au bout du rectangle côté éolienne**, flèche assemblée le long du rectangle. Sans ce dossier : grue au centre de la plateforme. | non |
| `SENS_CONVOIS` | lignes | Sens de circulation des convois : **du 1er au dernier point**. Une ligne de quelques dizaines de mètres posée sur la route/piste suffit ; rouler à contresens est pénalisé, dans le sens est favorisé. | non |
| `TALUS_REMBLAI`, `TALUS_DEBLAI` | lignes | Pied de remblai / crête de déblai (affichage, calque « Talus »). | non |
| `RESEAU_ENTERRE` | lignes | Réseau électrique inter-éolien enterré (calque activable). | non |
| `GROS_ENTRETIEN` | polygones | Zones de gros entretien (calque activable, à visée pédagogique). | non |
| `BASE_VIE` | polygones | Base vie (bungalows, parking). | non |
| `PDL` | polygones | Poste de livraison (petit bâtiment). | non |
| `EOLIENNES_EXISTANTES` | points | Éoliennes déjà en service dans le voisinage (contexte) : rendues montées et tournantes. `name` facultatif ; données étendues `tip` (hauteur bout de pale, m) et `rotor` (diamètre, m) facultatives. | non |
| `RESEAU_EXTERNE` | lignes | Câble de raccordement externe (mode raccordement, voir ci-dessous). | non |
| `ARMOIRES` | points | Armoires de coupure mécanique (`name` facultatif). | non |
| `POSTE_SOURCE` | polygone ou point | Poste source d'arrivée du raccordement (clôture, transformateur, portiques). | non |
| `PANNEAUX` | points | Panneaux de texte : `name` = texte affiché ; donnée étendue `hauteur` (m au-dessus du sol, défaut 6). Les noms `E01`… sont déjà affichés au-dessus des machines : ne pas les dupliquer ici. | non |
| `CADASTRE` | polygones | Parcelles, `name` = section ou section+numéro (calque activable, sert aussi à peindre les cultures). | non |

Données étendues : `<ExtendedData><Data name="largeur"><value>5</value></Data></ExtendedData>` dans le `<Placemark>`.
Les styles (couleurs) sont libres : ils ne portent aucune sémantique.

## Conventions géométriques
- Les polygones sont fermés (dernier point = premier point), sans trou (les trous sont ignorés).
- Une plateforme peut être découpée en plusieurs polygones ; ils sont tous à plat au même niveau (Z béton de la machine, sinon
  moyenne du terrain naturel).
- Les pistes doivent toucher les plateformes (raccord tangent) et se connecter au réseau routier public : le moteur route les convois
  sur OpenStreetMap + `PISTES` + `PLATEFORMES` + `RETOURNEMENTS` + `BYPASS`. Les convois s'arrêtent **sur la plateforme** ; les grues
  auxiliaires déchargent vers `STOCKAGE_PALES`. Une plateforme séparée de sa piste par moins de 60 m est raccordée automatiquement.
- `AIRE_GRUE` : placer le rectangle pour que son extrémité côté éolienne soit à 25–35 m de l'axe (le moteur impose 26 m minimum).
- L'ordre de montage est l'ordre alphabétique des noms de machines (E01 → E0n).

## Exemple minimal
Voir `docs/modele_chantier.kml` (dossiers vides prêts à remplir) et `sites/noyales/standard.kml` (export complet du site de Noyales).

## Projet de raccordement externe
Sans dossier `EOLIENNES` ni `PLATEFORMES`, le fichier décrit un **raccordement externe** : `CADASTRE`, `RESEAU_EXTERNE` (le câble,
en un ou plusieurs tronçons), `ARMOIRES` (armoires de coupure, équivalent des postes de livraison) et `POSTE_SOURCE` (arrivée).
Le moteur affiche alors le relief naturel, le cadastre, le câble en rouge parcouru d'électrons vers le poste source, les armoires et le
poste source ; il n'y a ni convoi ni grue. Les dossiers `PANNEAUX`, `EOLIENNES_EXISTANTES` et `GROS_ENTRETIEN` restent utilisables.
Le bloc JSON ne nécessite alors que `id`, `title`, `subtitle`.
