Chacun sa carte
Certains d'entre vous m'ont déjà demandé des conseils par mail pour afficher une carte Google Map sur leur blog hébergé chez Blogger. Si vous maîtrisez un tant soit peu le copier/coller, vous devriez pouvoir afficher une carte semblable à celle-ci en quelques minutes. Petit tutoriel étape par étape...
Introduction
Nous allons ici nous intéresser à l'API Version 2 de Google Map. La version 3 est disponible en béta mais je préfère commencer par la version que j'utilise actuellement.
Étape 1 : Récupérer une clé API
Afin d'utiliser une carte générée par Google Map, il faut vous identifier auprès des serveurs Google avec une clé correspondant à votre nom de domaine. Vous avez besoin pour cela d'un compte Google mais si vous avez un blog chez Blogger, c'est déjà fait et vous n'avez plus qu'à :
- Vous rendre sur cette page : http://code.google.com/intl/fr/apis/maps/signup.html
- Lire les conditions d'utilisation (si vous êtes anglophobe, il y a d'autres langues disponibles dans un menu déroulant en haut à droite. Pas de français cependant.) ;
- Cocher le “I have read and agree with the terms and conditions”, indiquer l'adresse de votre blog et cliquer sur "Generate API Key" :
- Récupérer la clé ainsi générée avec un double-clic qui devrait tout sélectionner et un Ctrl+C pour faire un copier.

Étape 2 : Insérer la clé API dans son blog
Je considère que si vous souhaitez installer une carte, c'est que vous savez modifier le template de votre blog au moins de manière basique. Il vous faut alors :
- Ouvrir votre template ;
- Repérer l'élément du code suivant : UNE ERREUR S'EST GLISSEE !!!!
</head>
- Insérer juste avant cet élément le code ci-dessous en prenant soin d'insérer votre clé :
<script type='text/javascript'/ src='http://maps.google.com/maps?file=api&v=2.s&hl=fr&key=INSERER_VOTRE_CLE_ICI'>
Vous devriez avoir quelque chose comme ça :
Remarque : votre clé étant valable seulement pour le domaine de votre blog, vous aurez un message d'erreur à chaque fois que vous modifierez l'apparence de votre blog en utilisant l'onglet "Mise en page" de l'interface de Blogger. Ce n'est absolument pas un problème, votre carte fonctionnera correctement une fois en ligne.
Étape 3 : Configurer sa carte
Pour cette partie, le code que je vous donne correspond à la carte que j'utilise pour "le Japon et moi". Il y a de nombreuses autres possibilités mais vous pouvez toujours vous en servir de base pour développer votre propre carte.
- Ouvrir votre template ;
- Repérer l'élément du code suivant qui se situe tout à la fin :
</body>
- Insérer juste avant le code suivant :
<script type='text/javascript'>
//<![CDATA[
var select_html = '<select onChange="handleSelected(this)">' +
'<option selected> - Choisissez un lieu - </option>';
var gmarkers = [];
var htmls = [];
var i = 0;
var map = new GMap2(document.getElementById("map2"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.removeMapType(G_HYBRID_MAP);
map.addMapType(G_PHYSICAL_MAP);
map.setMapType(G_PHYSICAL_MAP);
map.setCenter(new GLatLng(38.341656192795924, 138.9111328125), 5);
function createTabbedMarker(point,name,html1,html2,label1,label2) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowTabsHtml([new GInfoWindowTab(label1,html1), new GInfoWindowTab(label2,html2)]);
});
gmarkers[i] = marker;
htmls[i] = html1;
select_html += '<option> ' + name + '</option>';
i++;
return marker;
}
function handleSelected(opt) {
var i = opt.selectedIndex - 1;
if (i > -1) {
GEvent.trigger(gmarkers[i],"click");
}
else {
map.closeInfoWindow();
}
}
// ************** Marker Zushi ******************
var point = new GLatLng(35.296746, 139.579840);
var marker = createTabbedMarker(point, "Zushi", "<table><tbody><tr><td><a href='http://lejaponetmoi.blogspot.com/2008/09/zushi-hayama.html'><img src='http://2.bp.blogspot.com/_p67Yup2YnnU/SOBXZ408fII/AAAAAAAADX0/Ht91U88x_6E/s320/Zushi_Hayama_001.jpg' width=150 height=100></a></td><td><u>Lieu</u> : Zushi<br><br><u>Nb. d'articles</u> : 1</td></tr></tbody></table>", "Cliquez sur l'article que vous souhaitez lire :<br>* <a href='http://lejaponetmoi.blogspot.com/2008/09/zushi-hayama.html'>Plage Hayama Morito</a>", "Description", "Articles");
map.addOverlay(marker);
select_html += '</select>';
document.getElementById("selection").innerHTML = select_html;
//]]>
</script>
Le code pour votre carte est prêt et on a également configuré un menu déroulant qui reprend les lieux répertoriés sur la carte par ordre alphabétique. Vous pouvez bien sûr modifier certains éléments comme :
- Les coordonnées géographiques du centre de la carte :
map.setCenter(new GLatLng(38.341656192795924, 138.9111328125), 5);
- Le niveau de zoom (5 dans notre cas) :
map.setCenter(new GLatLng(38.341656192795924, 138.9111328125), 5);
- L'apparence des pop-ups lorsque vous cliquez sur un marqueur :
function createTabbedMarker(point,name,html1,html2,label1,label2) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowTabsHtml([new GInfoWindowTab(label1,html1), new GInfoWindowTab(label2,html2)]);
});
gmarkers[i] = marker;
htmls[i] = html1;
select_html += ' ' + name + '';
i++;
return marker;
}
function handleSelected(opt) {
var i = opt.selectedIndex - 1;
if (i > -1) {
GEvent.trigger(gmarkers[i],"click");
}
else {
map.closeInfoWindow();
}
}
Étape 4 : Placer un marqueur
Si vous jetez un coup d'œil au code source de mon blog (qui est un vrai capharnaüm), vous verrez à la fin une longue liste d'éléments que j'ai appelé ******* Marker XYZ ********* correspondant à chaque lieu présent sur la carte (Voir l'exemple "Marker Zushi" ci-dessus). Vous pouvez les reproduire pour installer vos propres marqueurs en prenant soin de changer les coordonnées géographiques de la première ligne. Le reste correspond à ma configuration des pop-ups avec deux onglets et aux différents champs que je souhaitais avoir : modifiez-les donc selon vos besoins personnels.
Étape 5 : Afficher la carte
Pour la dernière étape, il vous suffit de créer un article où vous souhaitez que la carte s'affiche et d'y insérer le code suivant :
<div id="map2" style="width: 605px; height: 450px; color: rgb(51, 51, 51);"></div>
Vous pouvez notamment modifier ici la taille de la carte affichée :
width: 605px; height: 450px;
Et choisir ou non d'afficher une liste des lieux répertoriés avec le code suivant (placez-le où vous souhaitez qu'elle s'affiche) :
<div id="selection"></div>
Publiez votre article et voilà votre carte exposée aux yeux du monde ! Je ne rentrerai pas plus dans les détails pour aujourd'hui, mais si vous avez une question, n'hésitez pas à laisser un message bien entendu. Bon bidouillage ! ;)






Merci beaucoup pour ce tutoriel !
Juste 2-3 remarques :
- le code où il faut insérer la clé n'est pas accepté tel quel par Blogger (du moins dans mon cas). J'ai dû rajouter fermer la balise script à la fin et changer les & en ; pour que Blogger finisse par accepter.
- en revanche, je ne sais pas si ça marche avec ces modifications puisque rien ne s'affiche sur mon blog. Pourtant j'ai refais les manipulations pour être sûr d'avoir suivi les instructions.
http://nearly-lost-in-translation.blogspot.com/2009/07/innovation-sur-le-blog-suivez-moi-la.html
Aargh ! C'est une vraie plaie de poster du code tel quel sous Blogger, il interprète tout et change ce qu'on voudrait pas. >_<
J'ai pas le temps là tout de suite d'arranger mon tutoriel mais essaie ça : ne remplace pas les "&" en ";" seul mais plutôt en "& amp ;" (sans les espaces, j'ai écrit comme ça pour que ça passe). Si tu cliques sur la capture d'écran, tu pourras voir comment c'est écrit sur mon blog. ;)
Pour la fermeture de la balise, c'est tout à fait logique et je me demande bien où elle est passée chez moi. ^^;
J'ai jeté un œil au reste de ton code et ça a l'air bon. Tiens-moi au courant avec la modif ci-dessus. ;)
Oui maintenant l'affichage marche ! Merci !
Il me reste deux petits problèmes qui doivent être rapides à résoudre bien que je bloque dessus. Le premier concerne les petites images : j'essaie de mettre une image (lien picasaweb) mais elle ne s'affiche pas. Là aussi il y a une manipulation à suivre ?
Le second problème est un problème d'affichage. On ne voit les liens vers les articles qu'en surbrillance. J'ai regardé ton code source, je n'ai pas vu de balises en plus au niveau du marqueur, donc je ne sais pas d'où ça vient...
En tout cas, merci beaucoup pour ton aide !
Ah, après vérification, l'affichage de la photo se fait. Il ne reste donc qu'un problème, mais il se fait tard, je chercherai demain ;).
Oups ! On s'est croisés on dirait. Je suis allé voir si tu t'en sortais sur ton blog. ^^;
Pour tes liens, c'est normal car les liens de ton blog sont formatés pour être de couleur blanche. Du coup, ça fait du blanc sur blanc et on voit rien. ;)
Dans ton template, au tout début, il y a une section "Variable definitions". Il faut que tu modifies la couleur des "mainLinkColor" et "mainVisitedLinkColor". Ils ont un code couleur "fff" ce qui correspond au blanc. Tu peux je pense changer tout ça dans l'onglet "Polices et couleurs" de Blogger. ;)
Merci, tout marche correctement a présent, j'ai mis à jour ma carte du Japon ;).
Hum, j'aime !
Je suis désolé de revenir t'embêter, mais ma carte du Japon ne semble plus vouloir s'afficher. Et ce alors que je n'ai rien touché depuis la dernière fois où elle s'affichait correctement.
Je vois vraiment pas d'où ça peut venir :(.
Désolé pour la réponse tardive, je rentre tout juste de Hong Kong. Je viens de jeter un œil à ton code source et je n'ai rien vu de spécial. Si tu n'as pas du tout touché à ton code (même des choses qui n'ont rien à voir avec GoogleMap), alors ça peut venir d'un bout de code présent dans un de tes derniers posts mais ça me paraît peu probable. @_@ Je vais essayer de voir ça plus en détails mais j'avoue bloquer là...
Salut !
Pour essayer de trouver le probleme, je me suis cree un autre blog avec le meme modele de base sur lequel je voulais refaire toute la manip.
Mais des l'insertion du premier script (celui avec la cle API), je recois un message d'erreur:
Message d'erreur XML : The element type "head" must be terminated by the matching end-tag "".
Poutant, je n'ai pas touche a ce tag, j'ai juste insere le script.
D'ou ca peut venir ? Qu'est-ce que ca veut dire ?
Salut,
J'ai refait toute la procédure sur un blog vierge : il va falloir que je trouve une solution pour changer ça dans mon tutoriel mais il semblerait que ton "nouveau" problème soit le même qu'avant. Ton code pour la clé API est comme suit :
src='http://maps.google.com/maps?file=api&v=2.s&hl=fr&key=######' type='text/javascript'>
Il faut que tu remplaces tous les "&" par des "& amp ;" sans les espaces. Dis-moi ce que ça donne. ;)
Pourtant, quand j'arrive sur la page avec tout le code html, j'ai bien les & indiqués aux endroits qu'il faut. Mais quand je veux réécrire la phrase, j'obtiens un message d'erreur comme précisé ci-dessus.
Votre modèle ne peut pas être analysé, car sa structure n'est pas conforme. Vérifiez que tous les éléments XML sont bien fermés.
Message d'erreur XML : The element type "head" must be terminated by the matching end-tag "".
Or je ne vois pas à quoi ça fait référence. Mais ça m'empêche de valider mes changements.