Géolocalisation et cartes en PHP : bibliothèques, API et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Géolocalisation et cartes en PHP : aperçu des outils et exemples de code



Dans le développement web moderne, la fonctionnalité de géolocalisation et de travail avec les cartes est devenue une partie intégrante de nombreux projets. PHP, en tant que langage serveur, gère parfaitement le traitement des données géographiques, l'intégration des services cartographiques et la détermination de la localisation des utilisateurs. Dans cet article, nous allons détailler les principales bibliothèques et outils pour travailler avec la géolocalisation et les cartes en PHP, et fournir des exemples pratiques de code.



1. Détermination de la localisation par adresse IP (GeoIP)



La façon la plus simple d'obtenir la géolocalisation approximative d'un utilisateur est de déterminer son pays et sa ville à partir de son adresse IP. Pour cela, il existe plusieurs solutions en PHP :



Bibliothèque geoip2 (MaxMind GeoIP2)



MaxMind fournit une base de données gratuite GeoLite2 et une base payante GeoIP2. Installation via Composer :



composer require geoip2/geoip2


Exemple de détermination de localisation :



<?phprequire_once 'vendor/autoload.php';

use GeoIp2\\Database\\Reader;

// Indiquez le chemin vers la base de données téléchargée GeoLite2-City.mmdb$reader = new Reader('/path/to/GeoLite2-City.mmdb');$record = $reader->city('8.8.8.8'); // Adresse IP à vérifier

echo "Pays : " . $record->country->name . "<br>";echo "Ville : " . $record->city->name . "<br>";echo "Latitude : " . $record->location->latitude . "<br>";echo "Longitude : " . $record->location->longitude . "<br>";?>


Fonction intégrée geoip_record_by_name()



Si l'extension GeoIP (obsolète) est installée sur le serveur, vous pouvez utiliser :



<?php$record = geoip_record_by_name('8.8.8.8');echo "Ville : " . $record['city'];?>


2. Travail avec les cartes via JavaScript + PHP



PHP génère le HTML/JavaScript, tandis que le rendu des cartes se fait côté client. Les bibliothèques les plus populaires :



  • Leaflet — légère, gratuite, sans clé API
  • OpenLayers — puissante, pour des tâches géospatiales complexes
  • Google Maps JavaScript API — nécessite une clé, mais offre des fonctionnalités riches


Exemple d'intégration de Leaflet avec PHP



Créons une carte simple avec un marqueur dont les coordonnées sont transmises depuis PHP :



<?php$lat = 55.7558;  // Moscou$lng = 37.6173;?><!DOCTYPE html><html><head>    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script></head><body>    <div id="map" style="height: 400px; width: 100%;"></div>    <script>        var map = L.map('map').setView([<?= $lat ?>, <?= $lng ?>], 10);        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {            attribution: '&copy; Contributeurs OpenStreetMap'        }).addTo(map);        L.marker([<?= $lat ?>, <?= $lng ?>]).addTo(map)            .bindPopup('Marqueur depuis PHP');    </script></body></html>


3. Géocodage (conversion d'adresse en coordonnées)



Pour obtenir les coordonnées à partir d'une adresse, utilisez les API :



  • Nominatim (OpenStreetMap) — gratuit, mais avec des limitations (1 requête par seconde)
  • Google Geocoding API — payant après dépassement du quota
  • Yandex Geocoder — populaire en Russie


Exemple de géocodage via Nominatim



<?phpfunction geocode($address) {    $url = "https://nominatim.openstreetmap.org/search?format=json&q=" . urlencode($address);    $opts = [        'http' => [            'method' => 'GET',            'header' => "User-Agent: MyApp/1.0\\r"                    

Recommendations