Voici une classe PHP assez complète qui vous permet de manipuler facilement des Google Maps. Cette classe gère pas mal de choses au niveau du javascript d’une gmap comme la gestion de catégories de marqueurs, les itinéraires, l’insertion de flux XML, la clusterisation (regroupement de marqueurs), l’affichage d’infobulles, la geolocalisation d’une adresse etc…On utilise donc cette classe pour générer le javascript dont on pourra se servir dans notre code HTML.

On peut facilement obtenir des rendus de ce style :

Avant de commencer, il est impératif d’avoir une clef google maps que l’on obtient rapidement sur ce lien : google maps signup. Le constructeur de cette classe « new GoogleMapAPI() » prend en paramètre cette clef, elle est donc essentielle au bon fonctionnement du programme.

La classe est plutôt bien commentée (en anglais) mais voici 2 exemples d’utilisations de la classe qui montrent différentes possibilités. Cela permet également de se faire une idée sur le code source généré.

Attention : les requêtes de geocoding sont limitées à 15000/24h/IP, il se peut donc que les démos ne fonctionnent pas en fin de journée.

Google Maps simple avec marqueurs et itinéraires

...

require('GoogleMapAPI.class.php');

$gmap = new GoogleMapAPI('***');
$gmap->setDivId('test1');
$gmap->setDirectionDivId('route');
$gmap->setCenter('Nantes France');
$gmap->setDisplayDirectionFields(true);
$gmap->setSize(600,600);
$gmap->setZoom(11);
$gmap->setDefaultHideMarker(false);

// cat1
$coordtab = array();
$coordtab []= array('nantes france','<strong>html content</strong>');
$coordtab []= array('carquefou france','<strong>html content</strong>');
$coordtab []= array('vertou france','<strong>html content</strong>');
$coordtab []= array('rezé france','<strong>html content</strong>');
$gmap->setIconSize(20,34);
$gmap->addArrayMarkerByAddress($coordtab,'cat1','markerpics.png');

// cat2
$coordtab = array();
$coordtab []= array('saint-herblain france','<strong>html content</strong>');
$coordtab []= array('bouguenais france','<strong>html content</strong>');
$coordtab []= array('orvault france','<strong>html content</strong>');
$gmap->addArrayMarkerByAddress($coordtab,'cat2');

$gmap->generate();
echo $gmap->getGoogleMap();

...

Démonstration

Code source de l’exemple :

  simple.php (5,6 KiB, 2 243 hits)

Google Maps avancée avec clusterisation (1600 marqueurs) issus d’un fichier KML

...

require('GoogleMapAPI.class.php');
$gmap = new GoogleMapAPI('***');
$gmap->setDivId('test1');
$gmap->setCenter('Nantes France');
$gmap->setDisplayDirectionFields(true);
$gmap->setClusterer(true);
$gmap->setSize(600,600);
$gmap->setZoom(7);
$gmap->addKML('kml/Locator3RF.kml','radars_fixes','Locator3RF.png');
$gmap->generate();
echo $gmap->getGoogleMap();

...

Démonstration (zoomer/dezoomer pour voir la clusterisation)

Code source de l’exemple :

  advanced.php (2,9 KiB, 1 486 hits)

Pour utiliser la clusterisation vous devez avoir les fichiers suivants :
Image du cluster
Fichier KML
Fichier markerclusterer_packed.js (Thanks to http://gmaps-utility-library.googlecode.com/)

Télécharger la GoogleMapAPI.class.php

  GoogleMapAPI.class.php (16,8 KiB, 2 673 hits)

Changelog

[23/09/2009]

- Implémentation de la fonction de centre+zoom lorsque l’on clique sur l’un des marqueurs. Le niveau du zoom sur les marqueurs peut se régler avec la méthode PHP : setInfoWindowZoom().
- Implémentation d’une fonction pour que la google maps centre/zoom automatiquement en fonction des marqueurs au chargement de la carte : setEnableAutomaticCenterZoom(true).

[23/07/2009]

- Correction du bug de langue

[29/06/2009]

- changement de la librairie de clusterisation : http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/src/ (Merci à Philippe Ivaldi)

[25/06/2009]

- ajout de la méthode javascript « showAddress() » qui permet de centrer la carte sur une adresse
- ajout de la méthode javascript « showAll() » qui affiche tous les marqueurs
- ajout de la méthode javascript « hideAll() » qui cache tous les marqueurs
- renomage des méthodes « hide() » et « show() » en « hideCategory() » et « showCategory() » pour un soucis de compatibilité

[19/06/2009]

- correction du bug de rafraichissement des itinéraires

[27/05/2009]

- utilisation de curl pour récupérer le xml (merci à Desfrênes Mickaël)
- reformatage du code selon les recommandations PEAR
- ajout des tags dans les commentaires (phpdoc, doxygen, IDE, …)
- modification de la portée des variables

[26/05/2009]

- Release initiale

Partager :