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>
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
<?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");
|
||||
Reference in New Issue
Block a user