Google Map API V3 : Placer un marker sur la carte
L'objectif de ce billet est de créer une carte Google Map sur laquelle nous localiserons un cinéma Pathé. Nous placerons à cette endroit un logo Pathé à la place de l'image classique des Marker Google Map. Enfin nous adjoindrons une fenêtre d'informations à ce Marker qui proposera de se rendre sur le site officiel du cinéma.
Placer un Marker
Nous allons utiliser l'objet Marker de l'API Google Map. Son constructeur prend un seul paramètre, un tableau statique d'options :
- position définit la position du Marker sur la carte et prend un objet de type LatLng.
- map définit la carte sur laquelle afficher le Marker et prend donc un objet de type Map.
- title définit le texte qui sera affiché au survol de la souris et prend une chaîne de caractères classique.
// Coordonnées du cinéma Pathé Bellecour Lyon var myLatlng = new google.maps.LatLng(45.758796,4.834607); // Carte centrée sur le cinéma, zoom 16 var myMapOptions = { zoom: 16, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; // Création de la carte var myMap = new google.maps.Map( document.getElementById('map'), myMapOptions ); // Création du Marker var myMarker = new google.maps.Marker({ // Coordonnées du cinéma position: myLatlng, map: myMap, title: "Cinéma Pathé Bellecour" });
Vous pouvez observer le rendu de ce premier exemple.
Personnaliser l'icône du Marker
Nous allons maintenant remplacer l'image classique des Marker Google Map par une image de notre choix. Pour notre exemple, j'ai choisi un logo Pathé de petite taille et sur fond transparent. Bien sûr, n'importe quelle image fonctionne.
Pour cela, nous allons créer un objet de type MarkerImage et lui donner comme paramètre l'URL de l'image que nous souhaitons utiliser comme icône de notre Marker. Il existe d'autre paramètres supplémentaires optionnels qui permettent par exemple de ne prendre qu'une seule partie d'une image, ou encore de définir le point d'encrage de notre image, etc. Je vous invite à consulter la documentation officielle si vous souhaitez utiliser ces fonctionnalités.
// Cinéma Pathé Bellecour var myLatlng = new google.maps.LatLng(45.758796,4.834607); // Carte centrée sur le cinéma var myMapOptions = { zoom: 16, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; // Création de la carte var myMap = new google.maps.Map( document.getElementById('map'), myMapOptions ); // Création de l'icône var myMarkerImage = new google.maps.MarkerImage('img/pathe.png'); // Création du marker var myMarker = new google.maps.Marker({ // Coordonnées du cinéma position: myLatlng, map: myMap, // Nous ajoutons un paramètre supplémentaire // icon pour lequel nous donnons le MarkerImage // que nous venons de créer. icon: myMarkerImage, title: "Cinéma Pathé Bellecour" });
Vous pouvez observer le rendu de ce deuxième exemple.
Ajouter une fenêtre d'information
Pour créer une fenêtre d'information, nous utiliserons l'objet InfoWindow qui prend en paramètre un tableau statique d'options. Plusieurs options sont disponibles mais nous ne verrons ici que l'option content qui permet de définir le contenu de la fenêtre en HTML. Cette objet s'utilise de la façon suivante :
// Options de la fenêtre var myWindowOptions = { content: '<h6>Cinéma Pathé Bellecour</h6>'+ '<p><a href="http://www.cinemasgaumontpathe.com/cinemas/cinema-pathe-lyon-bellecour/" title="Site officiel">Visiter le site officiel</a></p>' }; // Création de la fenêtre var myInfoWindow = new google.maps.InfoWindow(myWindowOptions);
Bien entendu, cette fenêtre ne s'affichera pas d'elle même. Pour l'afficher, il faut appeler la méthode open de l'objet InfoWindow. Cette méthode prend deux paramètres :
- map définit la carte sur laquelle afficher la fenêtre et prend donc un objet de type Map.
- anchor définit l'emplacement où la fenêtre doit être affichée. Il prend un objet de type MVCObject dont beaucoup d'autres dérivent et notamment l'objet Marker.
Nous souhaitons par ailleurs que cette fenêtre ne soit affichée que lorsque nous cliquons sur notre Marker. Pour cela, nous devons utiliser le gestionnaire d'évènement de l'API Google Map. Il s'utilise de la manière suivante :
google.maps.event.addListener( obj, event, handler);
Cette fonction prend donc trois paramètres :
- obj définit l'objet duquel proviendra l'évènement et prend n'importe quel objet de l'API.
- event une chaîne de caractère définissant le nom de l'évènement. click par exemple.
- handler définit la fonction à appeler lorsque l'évènement se produit.
Le script complet est donc le suivant :
// Cinéma Pathé Bellecour var myLatlng = new google.maps.LatLng(45.758796,4.834607); // Carte centrée sur le cinéma var myMapOptions = { zoom: 16, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; // Création de la carte var myMap = new google.maps.Map( document.getElementById('map'), myMapOptions ); // Création de l'icône var myMarkerImage = new google.maps.MarkerImage('img/pathe.png'); // Création du marker var myMarker = new google.maps.Marker({ // Coordonnées du cinéma position: myLatlng, map: myMap, // Nous ajoutons un paramètre supplémentaire // icon pour lequel nous donnons le MarkerImage // que nous venons de créer. icon: myMarkerImage, title: "Cinéma Pathé Bellecour" }); // Options de la fenêtre var myWindowOptions = { content: '<h6>Cinéma Pathé Bellecour</h6>'+ '<p><a href="http://www.cinemasgaumontpathe.com/cinemas/cinema-pathe-lyon-bellecour/" title="Site officiel">Visiter le site officiel</a></p>' }; // Création de la fenêtre var myInfoWindow = new google.maps.InfoWindow(myWindowOptions); // Affichage de la fenêtre au click sur le marker google.maps.event.addListener(myMarker, 'click', function() { myInfoWindow.open(myMap,myMarker); });
Vous pouvez observer le rendu de ce troisième et dernier exemple.



explication simples et efficaces un grand merci a
maximax31 | jeudi 18 mars 2010 | 18:08explication simples et efficaces un grand merci a toi !
Je n’ai pas réussi à le faire fonctionner, et
Nathan | samedi 20 mars 2010 | 20:38Je n’ai pas réussi à le faire fonctionner, et malgré que j’ai copié le code source après, rien ne s’affiche.
Pourquoi ?
Le code de l'exemple est parfaitement fonctionnel
Thierry Geindre | vendredi 9 avril 2010 | 11:49Le code de l'exemple est parfaitement fonctionnel comme le montre le rendu :
http://exemples.code-web.org/google...
Bases-toi peut être sur le code source de cette page.
Hi, je découvre tout juste l'existence de ce site
Porte blindee | dimanche 2 mai 2010 | 19:35Hi, je découvre tout juste l'existence de ce site et je suis assez surpris. Pour commencer le thème est très beau, mais je voulais plutôt discuter à propos d'un autre aspect, en effet, les différentes pages sont toutes biens rédigées et la plume que vous avez est différente de ce que l'on peut voir habituellemnt. Je m'abonne de suite au flux RSS pour ne rien manquer! A la prochaine.
Dis-moi, Pour afficher plusieurs markers, on fait
Gularu | mardi 17 août 2010 | 15:40Dis-moi,
Pour afficher plusieurs markers, on fait pareil mais du coup, toutes les infosbulles possèdent le meme texte, le dernier.
Une solution ?
Pour une petite démonstration des événements sur
mathieu | mercredi 1 septembre 2010 | 13:44Pour une petite démonstration des événements sur la v3 de l'API Google MAPS :
http://mdormeval44.free.fr/demos/00...
Le code source est librement téléchargeable...
Bonjour à tous, J'ai le même problème que Gularu,
Julien | mercredi 1 septembre 2010 | 18:22Bonjour à tous,
J'ai le même problème que Gularu, lorsqu'il y a plusieurs markers, tous les titres des markers sont les mêmes, celui du dernier marker.
Toujours pas de solution ???!
Merci