Google map à partir d’une table Mysql

Il existe un très bon tutorial pour cela malheureusement il n’est pas traduit en français. Je n’en ferai pas une traduction mot à mot, je tenterai juste de montrer ce qui a marché pour moi.
Pour faire afficher une Google map sur son site, deux solutions :

  • soit il s’agit d’une carte statique, pour indiquer un lieu, auquel cas il suffit d’aller entrer l’adresse par exemple ici et de coller le code généré à l’emplacement de la carte. Ils disent de ne pas modifier le code, mais il peut être utile de changer la valeur du zoom &zoom= (suivant que vos visiteurs viennent de loin ou pas).
  • pour afficher une carte dynamique, il suffit de demander à Google une clé d’API Google map. C’est gratuit si votre site n’est pas commercial, et c’est illimité pourvu que votre carte soit accessible (pas dans un intranet). Vous cochez juste la case disant que vous acceptez les conditions, et indiquez l’adresse du site sur lequel sera présente la carte. Vous pouvez demander autant de clés que vous voulez pour différents sites.

Les processus de « géocodage » n’étant pas encore automatisés, il vous faut prévoir dans la table mysql deux champs indiquant la latitude (lat) et la longitude (lng) du lieu (et il vous faudra les remplir, mais ne nous dispersons pas pour l’instant !). Noter le format float (10,6) de ce type de données.

`lat` FLOAT( 10, 6 ) NOT NULL ,
`lng` FLOAT( 10, 6 ) NOT NULL ,

Ensuite, il faut faire une sortie XML des données de la table, grâce à PHP.
Pour cela le tutorial propose plusieurs méthodes, selon que vous avez accès à domxml ou non.
Pour la méthode 1, essayez après avoir créé la table et son fichier de connection (dbinfo.php) de lancer le code suivant ce titre :
Using PHP’s domxml Functions to Output XML
Pour moi ça n’a pas marché (parce que je n’avais pas domxml) et j’ai donc fait l’essai suivant :
Using PHP’s echo to Output XML
C’est bien pratique de faire afficher le fichier XML car s’il contient la moindre erreur, c’est l’ensemble de la carte qui ne s’affichera pas.
Attention aux accents et aux caractères spéciaux qui posent des problèmes avec XML, il faut les modifier par exemple en ajoutant cette petite fonction qui remplace les caractères par leur code html :

function parseToXML($htmlStr)
{
$xmlStr=str_replace( »,’>’,$xmlStr);
$xmlStr=str_replace(‘ »‘,’"’,$xmlStr);
$xmlStr=str_replace(« ‘ »,’'’,$xmlStr);
$xmlStr=str_replace(« & »,’&’,$xmlStr);
return $xmlStr;
}

ou en remplaçant chaque donnée par :

utf8_encode($donnee)

Si vous avez php5, vous pouvez utiliser le chapitre suivant (ça a marché pour moi mais attention les fichiers domxml et DOM se ressemblent beaucoup, ils ne sont pourtant pas interchangeables):
Using PHP’s DOM functions to output XML

Ensuite il faut créer la carte, ce sera même la première chose qui apparaîtra dans votre fichier html (voir le tutorial):

<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjU0EJWnWPMv7oQ-jjS7dYxTPZYElJSBeBUeMSX5xXgq6lLjHthSAk20WnZ_iuuzhMt60X_ukms-AUg »
type= »text/javascript »>

Remplacer la clé d’API (en gras) par votre propre clé.
Ensuite appeler les icônes qui vont marquer les lieux (dans l’exemples ils ont des marqueurs bleu et rouge pour marquer les bars et les restaurants différemment selon la case « type » dans leur table.
Creating custom icons
Ensuite appeler le fichier php qui a marché pour générer la sortie XML.
Loading the XML file
Ensuite créer les marqueurs et ce qui s’affiche lorsqu’on clique dessus :
Creating markers & info windows
Et pour finir, faire afficher la carte (voir la fin du code dans le tutorial).
Je ne pense pas que mes infos soient tout à fait suffisantes, mais ça devrait finir par marcher.
Je trouve que ça vaut la peine de se pencher sur la question et d’aller pas à pas, il y a tant d’applications géniales de Google map, voir par exemple, Couchsurfing, un site génial permettant de trouver ou proposer un hébergement gratuit !
Votre carte s’affichera seulement quand il n’y aura plus d’erreur ! Comme c’est beau de voir enfin s’afficher le petit marqueur après une journée à se prendre la tête !!!
Dernier souci, comment trouver la latitude et la longitude pour les 200 points à afficher sur la carte ? Google propose un service de Geocoding (avec nombre de géocodages par jour limité) : GeocodingRequests
Je me débats avec httpRequest pour faire cette opération automatiquement.