Carte des inscrits

Extension WordPress – Carte des Inscriptions Eurêkamaths

  • README
  • Guide d'installation complet

Description +

📋 Description

Extension WordPress qui affiche sur une carte interactive (Leaflet) toutes les classes inscrites au concours Eurêkamaths. Les marqueurs sont colorés selon le niveau (CM1 = jaune, CM2 = vert, 6e = violet) et regroupés automatiquement avec Leaflet.markercluster.

Fonctionnalités +

🗺️ Fonctionnalités

Carte interactive

  • Fond de carte OpenStreetMap : gratuit et collaboratif
  • Clustering automatique : les marqueurs proches sont regroupés
  • Zoom et navigation : contrôles intuitifs
  • Responsive : s’adapte à tous les écrans

Marqueurs colorés par niveau

  • 🟡 CM1 : Icône jaune (#FFD700)
  • 🟢 CM2 : Icône verte (#28a745)
  • 🟣 6e : Icône violette (#9B59B6)

Popups informatifs

Au clic sur un marqueur, affichage de :

  • Nom de la classe et niveau
  • Nom de l’enseignant
  • Établissement
  • Commune et code postal
  • Nombre d’élèves

Statistiques

Affichage en temps réel :

  • Nombre total de classes inscrites
  • Répartition par niveau (CM1, CM2, 6e)

Filtrage par année scolaire

  • Affiche uniquement les inscriptions de l’année scolaire sélectionnée
  • Par défaut : année scolaire en cours

Installation +

🚀 Installation

Prérequis

  • WordPress avec les extensions :
    • Inscription Concours Eurêkamaths (pour la table inscrits)
  • Tables de base de données :
    • wp_inscrits avec colonnes : id_inscrit, classe, niveau, prenom, nom, nb, uai, annee_scolaire
    • wp_etabs_geolocalisation avec colonnes : uai, nom_etab, commune, cp, latitude, longitude

Structure des fichiers

carte-inscriptions/
├── carte-inscriptions.php (fichier principal)
├── assets/
│   ├── carte-script.js
│   └── carte-style.css
└── README.md

Étapes d’installation

  1. Créer le dossier du plugin
    mkdir wp-content/plugins/carte-inscriptions
    mkdir wp-content/plugins/carte-inscriptions/assets
    
  2. Copier les fichiers
    • carte-inscriptions.php : fichier principal PHP
    • assets/carte-script.js : JavaScript Leaflet
    • assets/carte-style.css : styles CSS
  3. Vérifier la table etabs_geolocalisationLa table doit contenir les colonnes latitude et longitude :
    ALTER TABLE wp_etabs_geolocalisation
    ADD COLUMN latitude DECIMAL(10, 8) DEFAULT NULL,
    ADD COLUMN longitude DECIMAL(11, 8) DEFAULT NULL;
    
  4. Activer le plugin
    • Allez dans WordPress Admin → Extensions
    • Activez « Carte des Inscriptions Eurêkamaths »
  5. Utiliser le shortcode
    • Ajoutez le shortcode dans une page ou un article :
      [carte_inscriptions]

Fonctionnalités +

🎨 Personnalisation du shortcode

Le shortcode accepte plusieurs paramètres optionnels :

[carte_inscriptions height="600px" zoom="6" center_lat="46.603354" center_lng="1.888334" annee="2024-2025"]

Paramètres disponibles

Paramètre Description Valeur par défaut
height Hauteur de la carte 600px
zoom Niveau de zoom initial 6 (France entière)
center_lat Latitude du centre initial 46.603354 (centre France)
center_lng Longitude du centre initial 1.888334
annee Année scolaire à afficher Année en cours

Exemples d’utilisation

Carte par défaut (height="600px"mais pour l’exemple height="200px"):

[carte_inscriptions  height="200px"]

Carte centrée sur l’Île-de-France :

[carte_inscriptions zoom="8" center_lat="48.8566" center_lng="2.3522" height="200px"]

Carte avec année spécifique :

[carte_inscriptions annee="2023-2024"]

Carte plus grande :

[carte_inscriptions height="400px"]

Base de données +

📊 Base de données

Table wp_etabs_geolocalisation

Colonnes requises pour la carte :

Colonne Type Description
uai varchar(8) Code UAI de l’établissement
nom_etab varchar(255) Nom de l’établissement
commune varchar(100) Commune
cp varchar(10) Code postal
latitude decimal(10,8) Latitude GPS
longitude decimal(11,8) Longitude GPS

Important : Les établissements sans coordonnées (latitude/longitude NULL ou 0) ne seront pas affichés sur la carte.

Exemple de données

INSERT INTO wp_etabs_geolocalisation (uai, nom_etab, commune, cp, latitude, longitude)
VALUES
('0380001A', 'École primaire Jean Moulin', 'Grenoble', '38000', 45.188529, 5.724524),
('0750001B', 'Collège Victor Hugo', 'Paris', '75015', 48.841684, 2.289960);

Comment obtenir les coordonnées GPS ? +

🔍 Comment obtenir les coordonnées GPS ?

Option 1 : API Adresse (gouv.fr) – RECOMMANDÉ

Script PHP pour géocoder automatiquement :

<?php
global $wpdb;
$etabs = $wpdb->get_results("SELECT id, adresse, cp, commune FROM wp_etabs_geolocalisation WHERE latitude IS NULL");

foreach ($etabs as $etab) {
    $query = urlencode($etab->adresse . ' ' . $etab->cp . ' ' . $etab->commune);
    $url = "https://api-adresse.data.gouv.fr/search/?q=" . $query . "&limit=1";

    $response = file_get_contents($url);
    $data = json_decode($response, true);

    if (!empty($data['features'])) {
        $coords = $data['features'][0]['geometry']['coordinates'];
        $wpdb->update(
            'wp_etabs_geolocalisation',
            array(
                'longitude' => $coords[0],
                'latitude' => $coords[1]
            ),
            array('id' => $etab->id)
        );
    }

    usleep(200000); // Pause de 200ms entre chaque requête
}
?>

Option 2 : Import CSV

Si vous avez déjà les coordonnées dans un fichier CSV :

LOAD DATA LOCAL INFILE 'coordonnees.csv'
INTO TABLE wp_etabs_geolocalisation
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(uai, latitude, longitude);

Option 3 : Services en ligne

  • Google Maps : rechercher l’adresse, clic droit → « Plus d’infos sur cet endroit »
  • OpenStreetMap : rechercher l’adresse, les coordonnées s’affichent dans l’URL
  • GPS Visualizer : outil de conversion d’adresses en masse

Bibliothèques utilisées +

🎯 Bibliothèques utilisées

🔧 Dépannage +

🔧 Dépannage

La carte ne s’affiche pas

  • Vérifiez que les scripts Leaflet sont bien chargés (console navigateur)
  • Vérifiez que le shortcode est bien dans une page/article
  • Désactivez les autres plugins pour détecter un conflit

Aucun marqueur n’apparaît

  • Vérifiez que la table wp_inscrits contient des données
  • Vérifiez que la colonne annee_scolaire correspond à l’année affichée
  • Vérifiez que la table wp_etabs_geolocalisation a bien les colonnes latitude et longitude
  • Exécutez cette requête pour vérifier :
    SELECT COUNT(*) FROM wp_inscrits i
    INNER JOIN wp_etabs_geolocalisation e ON i.uai = e.uai
    WHERE e.latitude IS NOT NULL AND e.longitude IS NOT NULL;
    

Les marqueurs sont mal positionnés

  • Vérifiez l’ordre des coordonnées (latitude puis longitude)
  • Vérifiez que les coordonnées sont au bon format (décimal, pas sexagésimal)
  • Exemple correct : latitude = 48.8566, longitude = 2.3522

Erreur AJAX

  • Vérifiez les logs d’erreur PHP
  • Vérifiez que l’utilisateur a les droits (le shortcode est accessible sans connexion)
  • Vérifiez dans la console du navigateur

Support +

📞 Support

Pour toute question ou problème :

📄 Licence +

📄 Licence

© Eurêkamaths – Tous droits réservés

🔄 Changelog

Version 1.0.0

  • Première version
  • Carte interactive avec Leaflet
  • Clustering des marqueurs
  • Marqueurs colorés par niveau (CM1, CM2, 6e)
  • Popups informatifs
  • Statistiques en temps réel
  • Filtrage par année scolaire
  • Responsive design


🗺️ Guide d’installation complet – Carte des Inscriptions
📦 Vue d'ensemble +

📦 Vue d’ensemble

Ce guide vous accompagne pas à pas pour installer et configurer la carte interactive des inscriptions au concours Eurêkamaths.

🎯 Étape 1 : Prérequis

Avant de commencer, assurez-vous d’avoir :

  • ✅ WordPress installé et fonctionnel
  • ✅ Extension « Inscription Concours Eurêkamaths » activée
  • ✅ Tables de base de données :
    • wp_inscrits (créée par l’extension Inscription)
    • wp_etabs_geolocalisation (avec les données des établissements)

🔧 Étape 2 : Préparer la table des établissements

Ajouter les colonnes latitude et longitude

Si votre table wp_etabs_geolocalisation n’a pas encore les colonnes de géolocalisation :

ALTER TABLE wp_etabs_geolocalisation
ADD COLUMN latitude DECIMAL(10, 8) DEFAULT NULL,
ADD COLUMN longitude DECIMAL(11, 8) DEFAULT NULL;

-- Créer des index pour améliorer les performances
CREATE INDEX idx_coords ON wp_etabs_geolocalisation(latitude, longitude);

Vérifier la structure de la table

Votre table doit avoir au minimum ces colonnes :

DESCRIBE wp_etabs_geolocalisation;

Résultat attendu :

uai          varchar(8)
nom_etab     varchar(255)
adresse      varchar(255)
commune      varchar(100)
cp           varchar(10)
pays         varchar(100)
latitude     decimal(10,8)    <- NOUVEAU
longitude    decimal(11,8)    <- NOUVEAU

📂 Étape 3 : Installer l’extension Carte

Structure des fichiers à créer

wp-content/plugins/carte-inscriptions/
├── carte-inscriptions.php          <- Fichier principal
├── geocoding-utility.php            <- Utilitaire de géocodage (optionnel)
├── assets/
│   ├── carte-script.js              <- JavaScript
│   └── carte-style.css              <- CSS
└── README.md                         <- Documentation

Commandes pour créer la structure

cd wp-content/plugins/
mkdir carte-inscriptions
cd carte-inscriptions
mkdir assets

Copier les fichiers

  1. carte-inscriptions.php → fichier principal fourni
  2. assets/carte-script.js → JavaScript Leaflet
  3. assets/carte-style.css → styles CSS
  4. geocoding-utility.php → utilitaire (optionnel mais recommandé)

🌍 Étape 4 : Géocoder les établissements

Les coordonnées GPS sont indispensables pour afficher les établissements sur la carte.

Option A : Utiliser l’utilitaire de géocodage (RECOMMANDÉ)

  1. Ajouter le code de géocodage dans carte-inscriptions.php :
    // À la fin du fichier carte-inscriptions.php, avant la ligne finale
    require_once plugin_dir_path(__FILE__) . 'geocoding-utility.php';
    
  2. Créer une page WordPress (en tant qu’administrateur) :
    • Titre : « Géocodage des établissements »
    • Contenu : [geocode_etabs]
    • Publier la page
  3. Accéder à la page et cliquer sur « Démarrer le géocodage »
  4. Attendre la fin : le processus géocode automatiquement tous les établissements

Option B : Import manuel CSV

Si vous avez déjà un fichier CSV avec les coordonnées :

uai,latitude,longitude
0380001A,45.188529,5.724524
0750001B,48.841684,2.289960

Import SQL :

LOAD DATA LOCAL INFILE 'coordonnees.csv'
INTO TABLE wp_etabs_geolocalisation
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(uai, latitude, longitude);

Option C : API externe (pour développeurs)

Utiliser un service de géocodage :

  • API Adresse (gouv.fr) : gratuit, France uniquement
  • Nominatim (OpenStreetMap) : gratuit, monde entier
  • Google Geocoding API : payant mais précis

✅ Étape 5 : Activer l’extension

  1. Aller dans WordPress AdminExtensions
  2. Trouver « Carte des Inscriptions Eurêkamaths »
  3. Cliquer sur Activer

🎨 Étape 6 : Afficher la carte

Créer une page publique

  1. Créer une nouvelle page :
    • Titre : « Carte des inscriptions »
    • Slug : carte-inscriptions
  2. Ajouter le shortcode :
    [carte_inscriptions]
    
  3. Personnaliser (optionnel) :
    [carte_inscriptions height="700px" zoom="7" center_lat="46.603354" center_lng="1.888334"]
    
  4. Publier la page

Intégrer dans une page existante

Vous pouvez combiner avec d’autres shortcodes :

<h2>Les classes inscrites</h2>
<p>Découvrez toutes les classes participantes sur la carte interactive :</p>

[carte_inscriptions]

<h2>Inscrivez votre classe</h2>

Vous devez être connecté pour accéder au formulaire d’inscription.

Se connecter | S’inscrire

🔍 Étape 7 : Vérification

Vérifier que tout fonctionne

  1. Accéder à la page de la carte
  2. Vérifier l’affichage :
    • ✅ La carte s’affiche correctement
    • ✅ Les marqueurs apparaissent
    • ✅ Les marqueurs ont les bonnes couleurs (jaune/vert/violet)
    • ✅ Les popups s’ouvrent au clic
    • ✅ Les statistiques sont affichées

En cas de problème

La carte ne s’affiche pas :

-- Vérifier qu'il y a des inscriptions
SELECT COUNT(*) FROM wp_inscrits;

-- Vérifier qu'il y a des coordonnées
SELECT COUNT(*) FROM wp_etabs_geolocalisation
WHERE latitude IS NOT NULL AND longitude IS NOT NULL;

-- Vérifier la jointure
SELECT COUNT(*) FROM wp_inscrits i
INNER JOIN wp_etabs_geolocalisation e ON i.uai = e.uai
WHERE e.latitude IS NOT NULL AND e.longitude IS NOT NULL;

Aucun marqueur :

  • Vérifiez la console JavaScript (F12) pour les erreurs
  • Vérifiez que l’année scolaire correspond
  • Vérifiez les paramètres du shortcode

Les marqueurs sont mal positionnés :

-- Vérifier quelques coordonnées
SELECT uai, nom_etab, latitude, longitude
FROM wp_etabs_geolocalisation
WHERE latitude IS NOT NULL
LIMIT 5;

📊 Étape 8 : Statistiques et suivi

Requêtes SQL utiles

Nombre d’établissements par département :

SELECT
    SUBSTRING(uai, 1, 3) as departement,
    COUNT(*) as nombre
FROM wp_inscrits i
INNER JOIN wp_etabs_geolocalisation e ON i.uai = e.uai
WHERE i.annee_scolaire = '2024-2025'
GROUP BY departement
ORDER BY nombre DESC;

Répartition par niveau :

SELECT
    niveau,
    COUNT(*) as nombre,
    SUM(nb) as total_eleves
FROM wp_inscrits
WHERE annee_scolaire = '2024-2025'
GROUP BY niveau;

Établissements sans coordonnées :

SELECT DISTINCT e.uai, e.nom_etab, e.commune
FROM wp_inscrits i
LEFT JOIN wp_etabs_geolocalisation e ON i.uai = e.uai
WHERE (e.latitude IS NULL OR e.longitude IS NULL)
AND i.annee_scolaire = '2024-2025';

🎯 Étape 9 : Optimisations (optionnel)

Mise en cache

Pour améliorer les performances sur un site à fort trafic :

// Ajouter dans carte-inscriptions.php
public function ajax_get_inscriptions_map() {
    $cache_key = 'carte_inscriptions_' . $annee_scolaire;
    $cached_data = get_transient($cache_key);

    if ($cached_data !== false) {
        wp_send_json_success($cached_data);
        return;
    }

    // ... code existant pour récupérer les données ...

    // Mettre en cache pour 1 heure
    set_transient($cache_key, $data, HOUR_IN_SECONDS);

    wp_send_json_success($data);
}

Invalidation du cache

Ajouter un hook pour vider le cache quand une inscription est créée :

add_action('inscription_created', function($annee_scolaire) {
    delete_transient('carte_inscriptions_' . $annee_scolaire);
});

🚀 Utilisation avancée +

🚀 Utilisation avancée

Afficher plusieurs années

Créer plusieurs pages avec des années différentes :

[carte_inscriptions annee="2024-2025" height="600px"]
[carte_inscriptions annee="2023-2024" height="600px"]

Carte par région

<!-- Île-de-France -->
[carte_inscriptions zoom="9" center_lat="48.8566" center_lng="2.3522"]

<!-- Auvergne-Rhône-Alpes -->
[carte_inscriptions zoom="8" center_lat="45.764043" center_lng="4.835659"]

Intégration dans un widget

Le shortcode fonctionne aussi dans les widgets WordPress :

  1. Aller dans ApparenceWidgets
  2. Ajouter un widget Texte personnalisé
  3. Coller le shortcode [carte_inscriptions height="400px"]

📱 Responsive

La carte est automatiquement responsive et s’adapte aux mobiles.

Tailles par défaut :

  • Desktop : 600px de hauteur
  • Tablette : 400px de hauteur
  • Mobile : 350px de hauteur

✨ Personnalisation des couleurs

Pour changer les couleurs des marqueurs, modifier dans carte-script.js :

var iconColors = {
    'yellow': '#FFD700',    // CM1 - modifier ici
    'green': '#28a745',     // CM2 - modifier ici
    'violet': '#9B59B6'     // 6e - modifier ici
};

🎓 Ressources

✅ Checklist finale

Avant de mettre en production :

  • [ ] Extension activée
  • [ ] Table wp_etabs_geolocalisation avec colonnes latitude et longitude
  • [ ] Établissements géocodés (vérifier avec une requête SQL)
  • [ ] Page créée avec le shortcode
  • [ ] Carte affichée correctement
  • [ ] Marqueurs colorés par niveau
  • [ ] Popups fonctionnels
  • [ ] Statistiques affichées
  • [ ] Responsive testé sur mobile
  • [ ] Performance acceptable (< 2 secondes de chargement)

🎉 Félicitations !

Votre carte interactive est maintenant opérationnelle !

Les utilisateurs peuvent visualiser toutes les classes inscrites, filtrer par année scolaire, et découvrir la répartition géographique du concours Eurêkamaths.