JavaScript • PHP • OpenLayers • PostGIS • GeoServer • Apache
Application de cartographie web interactive développée en architecture 3/3 (Client, Serveur, Base de données) permettant de visualiser et filtrer les établissements cinématographiques de France métropolitaine. Projet universitaire réalisé à l'Université Paul-Valéry et de Montpellier, M2 Géomatique 2024/2025.
Le projet repose sur une architecture trois tiers classique en webmapping : une base de données spatiale, un serveur cartographique et un client web. Chaque couche communique avec la suivante pour assurer un rendu dynamique et interactif.
Fig. 1 — Architecture 3/3 : Base de données → Serveur cartographique → Client web
PostgreSQL + PostGIS pour stocker les données spatiales des cinémas et les limites administratives (communes, départements, régions).
GeoServer génère les flux WMS et WFS à partir de PostGIS. Apache HTTP Server + PHP assurent la connexion dynamique entre la BDD et le client.
Page HTML/CSS/JS avec OpenLayers pour le rendu cartographique. Firefox comme navigateur client pour l'affichage final en localhost.
L'interface est divisée en trois blocs : les formulaires de recherche à gauche, la carte interactive OpenLayers au centre, et le panneau d'informations sur le cinéma sélectionné à droite.
Fig. 2 — Carte interactive OpenLayers : fond de carte © OpenStreetMap, points des cinémas (couche locale GeoJSON). Cliquez sur un point pour voir les informations.
Fig. 3 — Interface finale en localhost : formulaires de recherche, carte OpenLayers avec les cinémas de France (points bleus), panneau d'informations
Les formulaires permettent de filtrer les cinémas selon plusieurs critères simultanément. Les données sont récupérées depuis PostgreSQL via des requêtes SQL dynamiques en PHP.
Sélection d'une région et zoom automatique sur les cinémas de la région choisie.
Filtre par département avec zoom sur les établissements correspondants.
Sélection d'un programmateur (Pathé-Gaumont, CGR...) pour voir ses cinémas.
Filtre pour n'afficher que les cinémas d'art et d'essai ou les cinémas commerciaux.
Autocomplétion en temps réel lors de la saisie du nom de commune.
Combinaison de plusieurs filtres simultanément pour une recherche précise.
Extrait PHP — requête SQL dynamique avec filtres combinés sur la base de données :
// Construction dynamique de la requête selon les filtres actifs $sql = "SELECT ST_AsGeoJSON(geom) as geojson, nom, region_admi, dep, commune FROM \"etablissements-cinematographiques\" WHERE 1=1"; if (!empty($region)) { $sql .= " AND region_admi = '" . pg_escape_string($pg_conn, $region) . "'"; } if (!empty($commune)) { $sql .= " AND LOWER(commune) = LOWER('" . pg_escape_string($pg_conn, $commune) . "')"; } // Retour en GeoJSON pour OpenLayers echo json_encode(["type" => "FeatureCollection", "features" => $features]);
La carte intègre plusieurs contrôles et interactions avancés d'OpenLayers pour une expérience utilisateur optimale.
Gestion des couches : OSM, Plan IGN, Satellite SPOT IGN 2023 + limites administratives.
Barre d'échelle dynamique mise à jour au zoom pour une lecture cartographique précise.
OverviewMap pour un contexte géographique international.
Position de la souris affichée en temps réel en Lambert-93 (EPSG:2154).
Retour au zoom France entière en un clic.
Clic sur un cinéma pour afficher toutes ses informations : nom, adresse, écrans, fauteuils, séances, part de marché...
Extrait JavaScript — récupération des données PHP et affichage dans OpenLayers en WFS :
// Récupération des cinémas filtrés depuis PHP en GeoJSON const vectorSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), url: function(extent) { return 'BD_cinemas.php?region=' + region + '&departement=' + departement + '&ae=' + ae; }, strategy: ol.loadingstrategy.bbox }); // Affichage des informations au clic sur un cinéma map.on('click', function(evt) { const feature = map.forEachFeatureAtPixel(evt.pixel, function(feature) { return feature; }); if (feature) { const props = feature.getProperties(); document.getElementById('info').innerHTML = `<b>${props.nom}</b><br> Commune: ${props.commune}<br> Département: ${props.dep}`; } });
Le projet combine données thématiques et fonds de carte issus de sources officielles ouvertes.
Données thématiques — Établissements cinématographiques 2023 (CNC) — data.culture.gouv.fr
📊 Données cinémas (SHP 2023) — data.culture.gouv.fr
🗺️ Limites administratives — IGN ADMIN-EXPRESS
🛰️ Fonds de carte — OSM, Plan IGN, Satellite SPOT IGN 2023
📡 Flux WMS/WFS — IGN Géoservices, OpenStreetMap
Regroupement des cinémas proches en bulles numérotées aux zooms éloignés.
Détection automatique de la position du client pour afficher les cinémas proches.
Légende cartographique mise à jour selon les couches actives.
Mise en cache côté client pour réduire les temps de chargement.
Hébergé sur Codeberg • 100% Open Source
← Retour au portfolio