Files
ecoles/build_data.php
Arnaud 5633969d98 Version initiale — carte des établissements scolaires
Carte Leaflet (annuaire Éducation nationale) + API PHP/MySQL :
fiche établissement (effectifs, IPS, population INSEE, DPE ADEME),
GED documents/photos, commentaires par groupe, gestion utilisateurs
et politique de mots de passe. Imports opendata (effectifs, IPS,
population, DPE, IRIS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 21:35:41 +02:00

87 lines
2.6 KiB
PHP

<?php
/**
* Convertit l'export brut (raw_export.json) de l'annuaire de l'education
* en un fichier compact consomme par la carte.
*
* - ClES courtes pour reduire la taille (~3x plus petit).
* - Coordonnees arrondies a 5 decimales (~1 m de precision).
* - Les etablissements sans geolocalisation sont ecartes.
*
* Usage : php build_data.php
*/
$src = __DIR__ . '/raw_export.json';
$dstDir = __DIR__ . '/data';
$dst = $dstDir . '/etablissements.json';
if (!is_file($src)) {
fwrite(STDERR, "Fichier source introuvable : $src\n");
exit(1);
}
if (!is_dir($dstDir) && !mkdir($dstDir, 0777, true) && !is_dir($dstDir)) {
fwrite(STDERR, "Impossible de creer le dossier $dstDir\n");
exit(1);
}
fwrite(STDERR, "Lecture de l'export brut...\n");
$rows = json_decode(file_get_contents($src), true);
if (!is_array($rows)) {
fwrite(STDERR, "JSON source invalide.\n");
exit(1);
}
$out = [];
$skipped = 0;
foreach ($rows as $r) {
$lat = $r['latitude'] ?? null;
$lon = $r['longitude'] ?? null;
if ($lat === null || $lon === null) {
$skipped++;
continue;
}
$rec = [
'id' => $r['identifiant_de_l_etablissement'] ?? null,
'nom' => $r['nom_etablissement'] ?? null,
'type' => $r['type_etablissement'] ?? null,
'stat' => $r['statut_public_prive'] ?? null,
'reg' => $r['libelle_region'] ?? null,
'aca' => $r['libelle_academie'] ?? null,
'dep' => $r['libelle_departement'] ?? null,
'depc' => $r['code_departement'] ?? null,
'com' => $r['nom_commune'] ?? null,
'cp' => $r['code_postal'] ?? null,
'adr' => $r['adresse_1'] ?? null,
'tel' => $r['telephone'] ?? null,
'mail' => $r['mail'] ?? null,
'web' => $r['web'] ?? null,
'etat' => $r['etat'] ?? null,
'circ' => $r['nom_circonscription'] ?? null,
'lat' => round((float) $lat, 5),
'lon' => round((float) $lon, 5),
];
// Options : flag stocke seulement quand l'option est presente (1), pour alleger.
$options = [
'rest' => 'restauration',
'heb' => 'hebergement', // internat
'ulis' => 'ulis',
'segp' => 'segpa',
'appr' => 'apprentissage',
];
foreach ($options as $key => $field) {
if ((int) ($r[$field] ?? 0) === 1) {
$rec[$key] = 1;
}
}
$out[] = $rec;
}
file_put_contents($dst, json_encode($out, JSON_UNESCAPED_UNICODE));
$count = count($out);
$size = round(filesize($dst) / 1048576, 1);
fwrite(STDERR, "OK : $count etablissements ecrits ($size Mo), $skipped sans geoloc ignores.\n");
fwrite(STDERR, "Fichier : $dst\n");