4: Google Maps : Marqueurs et fenêtres d'informations
Par Pascal MARTIN le mercredi 16 avril 2008, 23:00 - Développement Web - Lien permanent
Les trois premiers articles de cette série consacrée à google-maps nous ont permis de :
- Voir comment afficher une carte avec google-maps
- Déterminer la latitude et la longitude d'un point, à partir de son adresse
- Découvrir les différents types de cartes et les différents contrôles proposés par l'API Google Maps
Nous allons à présent voir comment :
- Afficher un ou plusieurs marqueur(s), éventuellement personnalisé(s) sur notre carte,
- et ouvrir une fenêtre d'information lors du clic sur l'un d'entre eux.
Note : Au moment où j'écris cet article, je considère que vous avez lu et compris les trois précédents.
Si ce n'est pas le cas, n'hésitez pas à les consulter !
Note : Vous trouverez en pièce jointe à cet article une archive regroupant l'ensemble des exemples utilisés tout au long de cet article.
Squelette utilisé pour les exemples de cet article
Comme toujours - ou presque - cet article commence par le code de la page qui nous servira de base pour quasiment tous nos exemples.
Cette page se compose, à son habitude :
- de quelques lignes de XHTML,
- d'un soupçon de code PHP pour dynamiser le tout, et faciliter le développement,
- et de JavaScript permettant l'affichage de la carte.
Page XHTML cliente
Pour commencer, voici le code de la page (X)HTML au sein de laquelle sera affichée la page :
<?php require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'googlemaps-key.php');?> <?php header('Content-type: text/html; charset=UTF-8'); ?> <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Découverte de l'API Google Maps - Marqueurs et fenêtres d'information</title> <script type="text/javascript" src="http://www.google.com/jsapi?key=<?php echo $apiKey; ?>"> </script> <script type="text/javascript" src="exemple-0.js"> </script> </head> <body> <div id="map" style="border: 1px solid black; width: 500px; height: 500px; margin-left: 30px; margin-top: 30px; float: left"> </div> <script type="text/javascript"> init(); </script> </body> </html>
Encore une fois, rien de bien nouveau sous le soleil :
- Chargement des fichiers Google Maps depuis le serveur de Google,
- Chargement du fichier JS où nous placerons notre code,
- Création d'un élément d'id "map" qui contiendra la carte,
- Et appel de la fonction d'initialisation que nous déclarerons dans notre fichier JS.
Le tout dans un fichier PHP, pour faciliter le déploiement sur un serveur ou un autre - utilisant des clefs d'API différentes.
Côté PHP serveur
Un second fichier PHP, qui contiendra la définition de la clef d'API :
$apiKey = 'ABQIAAAAnA2FiFc_BknJBrLWqdaYgxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQe3jGsoyKKo5ZAasrlZefgTF6muQ';
En toute logique, cette définition sera rendue conditionnelle par l'environnement (test, intégration, recette, production, ...) où est lancée la page.
Et code JavaScript affichant la carte
Et pour finir, les deux méthodes JavaScript déclenchant l'affichage de la carte :
La première, chargeant les méthodes de l'API Google Maps, et provoquant l'appel de la seconde lorsque ladite API sera chargée :
var init = function () { google.load("maps", "2"); google.setOnLoadCallback(initMap); }; // init
Et la seconde, responsable de la création de la carte, du lancement d'une recherche de localisation, et de l'affichage de la carte, centrée sur celle-ci :
var initMap = function () { var map = new google.maps.Map2(document.getElementById('map')); map.addControl(new GSmallMapControl()); // Contrôle de zoom, déplacement sur la carte var adresse = 'place bellecour, Lyon, france'; var geocoder = new google.maps.ClientGeocoder(); geocoder.getLatLng(adresse, function (coord) { map.setCenter(coord, 13); // Centrage sur le point dont on a obtenu les coordonnées depuis l'adresse map.setMapType(G_HYBRID_MAP); // Vue satellite + informations cartographiques // TODO : marqueurs, infoWindows, ... }); }; // initMap
Vous noterez que je continue à travailler avec mon exemple habituel, la Place Bellecour, à Lyon.
Rendu
Et voila la capture d'écran obtenue lorsque l'on affichage la page "squelette" :
On retrouve, en toute logique, le résultat obtenu au cours des articles précédents.
Ajouter des marqueurs sur une carte Google Maps
Lorsque vous souhaitez afficher une carte sur votre site, votre but premier est probablement de permettre à vos utilisateurs
- soit de se repérer,
- soit de repérer un lieu
La carte en elle-même n'est donc généralement pas porteuse de toute l'information que vous auriez tendance à vouloir qu'elle présente.
Pour répondre à cette problématique, l'API Google Maps permet d'ajouter des "marqueurs" (en anglais, un "marker", des "markers") sur une carte.
Ceux-ci permettent d'indiquer une position précise sur la carte.
Ajouter un marqueur "standard"
Pour ajouter un marqueur à une carte, le principe est le suivant :
- Un marqueur est une instance d'objet
GMarker - Une instance d'objet
GMarkerse crée sur une instance d'objetGPoint - Et une instance d'objet
GPointse crée sur une latitude et une longitude. - Une fois l'instance d'objet
GMarkerobtenue, le marqueur s'ajoute à la carte à l'aide de la méthodeaddOverlay.
Exemple de base : Ajout d'un marqueur à la carte
Autre dit, si vous connaissez les latitude et longitude d'un point, l'ajout d'un marqueur à cette position se fera de la manière suivante :
var point = new GPoint(45.779915302498935, 4.803814888000488); // Création du point correspondant aux coordonnées nous intéressant var marker = new GMarker(point); // Création d'un marqueur localisé sur ce point map.addOverlay(marker); // Et ajout du marqueur à la carte
En injectant cette portion de code au sein du squelette présenté plus haut, nous obtiendrons l'affichage suivant :
(Comme de bien entendu, les coordonnées utilisées pour cet exemple sont... Celles correspondant au centre de la carte - ce qui n'est pas une obligation, comme nous le verrons par la suite.)
Un peu plus loin : Ajout de plusieurs marqueurs
Pour aller un peu plus loin, voyons comment positionner plusieurs marqueurs sur la même carte.
Dans le principe, nous allons :
- déclarer une liste contenant les coordonnées de toutes les stations de métro de Lyon,
- et parcourir cette liste, en ajoutant un marqueur à l'emplacement de chaque station.
Voila pour la liste :
// Liste des stations de metro de Lyon var stationsMetro = [ // Ligne A {ligne: 'A', loc: 'L. Bonnevay Astroballe', lat: 45.76434960130271, lng: 4.91063117980957}, {ligne: 'A', loc: 'Cusset', lat: 45.76482861073421, lng: 4.901275634765625}, // ... // Ligne B {ligne: 'B', loc: 'Charpennes - Charles Hernu', lat: 45.77021718342828, lng: 4.86393928527832}, {ligne: 'B', loc: 'Brotteaux', lat: 45.76692422863731, lng: 4.860076904296875}, // ... // Ligne C {ligne: 'C', loc: 'Cuire', lat: 45.7850630013786, lng: 4.8332977294921875}, {ligne: 'C', loc: 'Henon', lat: 45.77907726002176, lng: 4.827632904052734}, // ... // Ligne D {ligne: 'D', loc: 'Gare de Vaise', lat: 45.77955614297965, lng: 4.804630279541016}, {ligne: 'D', loc: 'Valmy', lat: 45.77464739768229, lng: 4.806003570556641} // ... ]; // stationsMetro
(Je vous laisse compléter à loisir ^^ )
Et pour le code la parcourant :
// Ajout d'un marqueur pour chacune des stations de metro de Lyon for (var i=0 ; i<stationsMetro.length ; i++) { map.addOverlay(createMarker(stationsMetro[i])); }
Par soucis de lisibilité, le code de création de chaque marqueur a été exporté au sein de la fonction createMarker :
var createMarker = function(infosStation) { var point = new GPoint(infosStation.lng, infosStation.lat); var marker = new GMarker(point); return marker; }; // createMarker
Cette fonction ne faisant, dans ce cas relativement basique, que créer le marqueur, et le retourner.
Une fois ces portions de code exécutées, nous obtenons une carte... portant plusieurs marqueurs :
Nous retrouvons le tracé des quatre lignes de métro lyonnaises !
(Au besoin, vous trouverez la liste complète des stations dans les exemples en pièce jointe à cet article)
Marqueurs personnalisés
La carte regroupant les dizaines de marqueurs des différentes stations de toutes les lignes de métro fait - il faut l'avouer - quelque peu fouilli : il est difficile de dissocier les lignes les unes des autres...
...Et je vous laisse imaginer ce qu'il en serait pour d'autres villes - quid de Paris et ses 14 lignes, par exemple ?
Une solution à cette problématique serait l'utilisation de marqueurs personnalisés.
Images de marqueurs
En zoomant de près, voici le marqueur "par défaut" utilisé par l'API Google Maps :

Et l'ombre lui correspondant :

L'un comme l'autre devant être des fichiers PNG, 24 bits, et porteurs de 8 bits de transparence.
Pourquoi ne pas tenter de remplacer ces marqueurs "classiques" par d'autres, personnalisés ?
Par exemple, nous pourrions utiliser le marqueur suivant (ici encore, zoomé fortement) :

Et son ombre :

(Je n'ai jamais été doué pour tout ce qui est graphisme - ça se remarque, je sais ^^ )
Création d'un marqueur personnalisé
Pour utiliser une image de votre choix à la place de celle par défaut, il faut passer un second paramètre au constructeur d'objet GMarker.
Ce second paramètre doit être un objet contenant une propriété nommée "icon", qui pointera vers une instance de classe GIcon.
Autre dit, il vous faut créer une instance de classe GIcon, et renseigner les propriétés définissant votre icone :
// Ajout d'un marqueur sur la carte : var myIcon = new GIcon(); myIcon.image = "images/mon-marqueur.png"; myIcon.shadow = "images/marqueur-ombre.png"; myIcon.iconSize = new GSize(20, 34); myIcon.shadowSize = new GSize(40, 33); myIcon.iconAnchor = new GPoint(10, 34); myIcon.infoWindowAnchor = new GPoint(10, 1); var markerOptions = { icon: myIcon }; var marker = new GMarker(coord, markerOptions); // Création d'un marqueur localisé sur ce point map.addOverlay(marker); // Et ajout du marqueur à la carte
Les propriétés qui nous intéressent sont les suivantes :
image: le chemin vers le fichier PNG/24 à utiliser pour le marqueur.shadow: la même chose, mais pour le fichier PNG/24 qui sera utilisé comme ombre du marqueur. De manière générale, vous utiliserez une ombre orientée à 45° par rapport à votre marqueur.iconSize,showSize: les tailles respectives, en pixels, de vos images.iconAnchor: Les coordonnées du point de l'image d'ombre qui doivent correspondre à la position du marqueurinfoWindowAnchor: Utile pour plus tard (seconde partie de cet article) : les coordonnées qui seront utilisées pour l'affichage d'une éventuellement fenêtre d'information associée au marqueur.
La portion de code présentée ci-dessus, une fois intégrée au squelette présenté plus haut, donne la capture d'écran suivante :
Je ne dirais pas que c'est plus joli... Mais c'est au moins plus original !
Exemple un peu plus complet d'utilisation de marqueurs personnalisés
Pour reprendre l'exemple utilisé un peu plus haut, celui des stations de métro des 4 lignes lyonnaises, voici ce que nous pourrions obtenir en travaillant avec des marqueurs personnalisés :
La méthode de création de marqueur crée, pour chaque marqueur, une instance d'objet GIcon, en utilisant une image dépendant de la ligne sur laquelle se trouve la station correspondant au marqueur en cours de création :
var createMarker = function(infosStation) { var point = new GPoint(infosStation.lng, infosStation.lat); var myIcon = new GIcon(); if (infosStation.ligne === 'A') myIcon.image = "images/marqueur-rouge.png"; else if (infosStation.ligne === 'B') myIcon.image = "images/marqueur-bleu.png"; else if (infosStation.ligne === 'C') myIcon.image = "images/marqueur-orange.png"; else if (infosStation.ligne === 'D') myIcon.image = "images/marqueur-vert.png"; myIcon.shadow = "images/marqueur-ombre.png"; myIcon.iconSize = new GSize(20, 34); myIcon.shadowSize = new GSize(40, 33); myIcon.iconAnchor = new GPoint(10, 34); myIcon.infoWindowAnchor = new GPoint(10, 1); var markerOptions = { icon: myIcon }; var marker = new GMarker(point, markerOptions); return marker; }; // createMarker
Et l'affichage devient plus appréciable :
(Pour cet exemple, j'ai rajouté à la page HTML le code correspondant à la génération de la légende ; je n'entre pas dans les détails ici : il s'agit de HTML de base)
Voila comment, en quelques lignes de code, vous avez rendu votre carte plus attrayante - et plus facile à comprendre et à exploiter par les visiteurs de votre site !
Utiliser l'outil "MapIconMaker" pour créer rapidement des marqueurs personnalisés
Les exemples précédents nous ont montré comment utiliser des images personnalisées pour nos marqueurs.
Mais, si ce que vous recherchez est - comme moi lors de mon dernier exemple - uniquement des marqueurs de couleurs différentes, vous n'avez pas besoin de vous compliquer la tâche en créant des images différentes pour chaque marqueur !
En réponse à cette problématique, vous trouverez dans la Bibliothèque d'utilitaires Google Maps un composant nommé MapIconMaker (anciennement nommé "IconFactory" - c'était le cas au moment où j'ai écrit les exemples accompagnant cet article, notamment).
Vous trouverez le post d'annonce sur le Blog officiel de Google Maps : MapIconMaker.
Ce composant permet de créer des icônes personnalisés, en spécifiant uniquement
- leur taille
- et leur couleur.
Il se charge de toute leur création - en se basant sur le marqueur "standard" de l'API Google Maps.
Par exemple, nous pourrions utiliser ce composant de la manière suivante :
var createMarker = function(infosStation) { var point = new GPoint(infosStation.lng, infosStation.lat); var color; if (infosStation.ligne === 'A') color = 'ed1c24'; else if (infosStation.ligne === 'B') color = '05a1e6'; else if (infosStation.ligne === 'C') color = 'fab41d'; else //if (infosStation.ligne === 'D') color = '00a650'; var myIcon = MapIconMaker.createMarkerIcon({width: 36, height: 32, primaryColor: color}); var markerOptions = { icon: myIcon }; var marker = new GMarker(point, markerOptions); return marker; }; // createMarker
Pour la création de chaque marqueur, et la portion de code suivante pour itérer sur la liste des stations :
// Ajout d'un marqueur pour chacune des stations de metro de Lyon for (var i=0 ; i<stationsMetro.length ; i++) { map.addOverlay(createMarker(stationsMetro[i])); }
La méthode createMarkerIcon prend en paramètre un objet définissant
width: la largeur du marqueur,height: la hauteur du marqueur,- et
primaryColor: la couleur de base du marqueur, le marqueur lui-même étant créé avec un effet de reflet lumineux.
Pour notre exemple, plutôt que de spécifier une image différente pour chaque ligne de métro, nous n'avons plus eu qu'à spécifier la couleur de la ligne !
Ce qui donne comme résultat l'effet reproduit sur la capture ci-dessous :
Plutôt satisfaisant, non ?
- Pas besoin de créer de nouveaux marqueur - ne répondant pas forcément aux habitudes des utilisateurs (forme, ombre, ...)
- Pas de marqueurs "moches" - enfin, là, ça dépend de votre graphiste

- Et différenciation des différentes lignes de métro - comme précédemment !
Un peu de fun avec les marqueurs
"Just for fun", vous pouvez imaginer aller plus loin avec vos marqueurs sur la carte !
Notamment, vous pouvez souhaiter n'en n'afficher certains que lorsque l'utilisateur a zoomé de suffisamment près, l'intérêt étant d'éviter de surcharger la carte lorsque l'on se trouve en vue lointaine.
En appliquant cette idée à nos exemples de lignes de métro, j'en suis arrivé au schéma suivant :
- Quelque soit le niveau de zoom, on affiche les quatre lignes de métro,
- Et si l'utilisateur zoome suffisament, on affiche en plus les trois lignes de tramway - avec des marqueurs plus petit (et on les masquera lorsque l'utilisateur dé-zommera)
- Le tout, pour simplifier les choses, en utilisant le composant MapIconMaker.
Pour cela, il nous faut modifier notre définition des lignes de métro/tram, pour ajouter un niveau de zoom "minimal" :
// Liste des stations de metro de Lyon var stationsMetro = [ // Lignes de Metro {ligne: 'A', loc: 'L. Bonnevay Astroballe', lat: 45.76434960130271, lng: 4.91063117980957, zoomMin: 0}, {ligne: 'A', loc: 'Cusset', lat: 45.76482861073421, lng: 4.901275634765625, zoomMin: 0}, {ligne: 'B', loc: 'Charpennes - Charles Hernu', lat: 45.77021718342828, lng: 4.86393928527832, zoomMin: 0}, {ligne: 'B', loc: 'Brotteaux', lat: 45.76692422863731, lng: 4.860076904296875, zoomMin: 0}, {ligne: 'C', loc: 'Cuire', lat: 45.7850630013786, lng: 4.8332977294921875, zoomMin: 0}, {ligne: 'C', loc: 'Henon', lat: 45.77907726002176, lng: 4.827632904052734, zoomMin: 0}, {ligne: 'D', loc: 'Gare de Vaise', lat: 45.77955614297965, lng: 4.804630279541016, zoomMin: 0}, {ligne: 'D', loc: 'Valmy', lat: 45.77464739768229, lng: 4.806003570556641, zoomMin: 0}, // Lignes de Tramway {ligne: 'T1', loc: '', lat: 45.740656892848875, lng: 4.8190659284591675, zoomMin: 13}, {ligne: 'T1', loc: '', lat: 45.73942889120833, lng: 4.818025231361389, zoomMin: 13}, {ligne: 'T2', loc: '', lat: 45.74896297821371, lng: 4.826200604438782, zoomMin: 13}, {ligne: 'T2', loc: '', lat: 45.74705666541551, lng: 4.8362937569618225, zoomMin: 13}, {ligne: 'T3', loc: '', lat: 45.76024885029971, lng: 4.861934334039688, zoomMin: 13}, {ligne: 'T3', loc: '', lat: 45.752935423810314, lng: 4.868786036968231, zoomMin: 13} ]; // stationsMetro
(Ici encore, vous trouverez la liste complète dans l'archive d'exemples jointe à cet article)
Pour ce qui est de la créations des marqueurs, quelques améliorations / différences :
var createMarker = function(infosStation, zoomLevel) { var point = new GPoint(infosStation.lng, infosStation.lat); var color = 'FFFFFF'; var width=32, height=32; if (infosStation.ligne.length === 1) { if (infosStation.ligne === 'A') color = 'ed1c24'; else if (infosStation.ligne === 'B') color = '05a1e6'; else if (infosStation.ligne === 'C') color = 'fab41d'; else if (infosStation.ligne === 'D') color = '00a650'; width = 36; height = 32; } else { if (infosStation.ligne === 'T1') color = '005e8a'; else if (infosStation.ligne === 'T2') color = '0f612f'; else if (infosStation.ligne === 'T3') color = '00aaa9'; width = 26; height = 22; } var myIcon = IconFactory.createMarkerIcon({width: width, height: height, primaryColor: color}); var markerOptions = { icon: myIcon }; var marker = new GMarker(point, markerOptions); marker.autoShowHide = function(zoom){ if (zoom >= infosStation.zoomMin) { marker.show(); } else { marker.hide(); } }; return marker; }; // createMarker
Tout d'abord, nous tenons compte des lignes de Tramways pour les affectations de couleurs, puis nous affectons à chaque marqueur une méthode qui l'affichera ou le masquera en fonction du niveau de zoom.
Ensuite, nous créons chaque marqueur :
// Ajout d'un marqueur pour chacune des stations de metro de Lyon for (var i=0 ; i<stationsMetro.length ; i++) { marker = createMarker(stationsMetro[i], map.getZoom()); markers.push(marker); map.addOverlay(marker); marker.autoShowHide(map.getZoom()); }
Sans oublier de l'afficher ou de le masquer en fonction du niveau de zoom de départ.
Et, pour finir, nous ajoutons à la carte un gestionnaire d'événement, branché sur l'événement levé en fin d'opération de zoom :
GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) { for (var i = 0; i < markers.length; i++) { markers[i].autoShowHide(newLevel); } });
Ceci signifie qu'à chaque fois que l'utilisateur viendra de (dé-)zoomer, la méthode d'affichage / de masquage sera appelée pour chaque marqueur.
Note : Nous en verrons probablement plus au sujet des événements au sein d'un futur article ; je ne rentrerai pas dans les détails ici.
Et voila la carte obtenu : en vue "lointaine" :
Et en zoomant, les stations des trois lignes de tramway apparaissent :
Cette idée peut éventuellement apporter quelque chose aux utilisateurs de votre site ? Pourquoi pas ? A vous de voir !
Afficher une miniature de la carte autour d'un marqueur : showMapBlowup
Avant de terminer cette première partie traitant des marqueurs affichables sur une Google Map, et pour faire transition avec la seconde parlant des fenêtres d'informations, voici une fonctionnalité que propose l'API Google Maps pour les marqueurs.
Vous avez la possibilité de provoquer l'affichage d'une "mini-map" lors du clic sur un marqueur. Pour cela, il faut brancher une fonction sur le gestionnaire d'événement "click" dudit marqueur.
Cette fonction sera chargée d'appeler la méthode showMapBlowup exportée par le marqueur :
// Ajout d'un premier marqueur : cliquer dessus provoquera l'affichage d'une mini-map var marker = new GMarker(coord); GEvent.addListener(marker, "click", function(){ marker.showMapBlowup({ zoomLevel: map.getZoom() - 2, mapType: G_NORMAL_MAP }); }); map.addOverlay(marker); // Et ajout d'un second marqueur, pour voir s'il apparait sur la mini-map var point2 = new GPoint(4.844112396240234, 45.760337735846626); var marker2 = new GMarker(point2); map.addOverlay(marker2);
La méthode showMapBlowup de la classe GMarker prend en paramètre un objet définissant l'affichage qui sera utilisé pour la "mini-map" lors de son ouverture.
Celui-ci peut en particulier être porteur des deux propriétés suivantes :
zoomLevel: le niveau de zoom auquel sera affichée la mini-map ; à vous de voir si vous préférez un zoom plus rapproché (pour avoir un aperçu du détail du lieu environnant le marqueur), ou au contraire, plus éloigné (pour situer le lieu sur une carte plus "grande").mapType: Le type de carte à afficher lors de l'ouverture de la mini-map.
En l'occurence, avec la portion de code reproduite ci-dessus, voici le rendu obtenu :
Comme indiqué plus haut, l'utilité principale étant de permettre à vos utilisateurs de mieux situer un lieu ; par exemple, ici, la mini-map permet de mieux situer la Place Bellecour dans Lyon, tout en conservant une vue assez rapprochée pour la carte principale.
Google Maps et fenêtres d'informations
Maintenant que nous savons comment ajouter des marqueurs sur une carte Google Maps, nous allons voir comment les rendre plus utiles.
Plus précisément, nous verrons quels différents types de fenêtres d'informations il est possible d'associer à un marqueur, de manière à présenter plus de données à l'utilisateur cliquant sur l'un d'entre eux.
Le principe de base pour l'affichage d'une fenêtre d'informations est le suivant :
- Création d'un marqueur,
- Création d'une fonction ouvrant une fenêtre d'informations sur un marqueur,
- Et association de cette fonction à un événement déclenché sur le marqueur - typiquement, un clic sur celui-ci.
Fenêtre d'informations simple
Le premier type de fenêtre d'information proposé par Google Maps est un simple affichage de données au format HTML.
Une fenêtre de ce type est ouverte à l'aide de la méthode openInfoWindowHtml de la classe GMarker :
var marker = new GMarker(coord); var window = function() { marker.openInfoWindowHtml( '<strong>Place Bellecour</strong>' + '<br /><img src="images/place-bellecour-miniature.jpg" alt="" />' + '<br /><a href="http://fr.wikipedia.org/wiki/Place_Bellecour">Voir l\'article sur Wikipedia (fr)</a>' ); }; GEvent.addListener(marker, "click", window); map.addOverlay(marker);
On retrouve ici les étapes que je décrivais juste au-dessus :
- On commence par instancier un marqueur,
- Puis on déclare une fonction ouvrant une fenêtre d'information rattachée à ce marqueur,
- Fonction que l'on rattache au clic sur ledit marqueur,
- Et, enfin, on ajoute le marqueur à la carte.
Et voici le rendu obtenu lors du clic sur notre marqueur :
On constate bien que les éléments HTML ont été affichés - je pense notamment à l'image et à l'hyperlien.
Fenêtre d'informations multi-onglets
Une fois que l'on a commencé à afficher des informations lors du clic sur un marqueur, on se rend compte que la fenêtre proposée n'est pas assez grande... Fidèle au concept "multi-tab" utilisé par tous les navigateurs modernes, l'API Google Maps permet d'ouvrir une fenêtre d'informations... à plusieurs onglets !
Ceci se fait à l'aide de la méthode openInfoWindowTabsHtml de la classe GMarker, qui prend en paramètre une liste d'instances d'objet GInfoWindowTab.
Chacun de ces objets GInfoWindowTab est construit à l'aide de deux paramètres :
- le titre de l'onglet,
- et son contenu - au format HTML.
Par exemple, pour une fenêtre d'informations à deux onglets :
var marker = new GMarker(coord); var window = function() { var tabs = [ new GInfoWindowTab('Infos', '<strong>Place Bellecour</strong>' + '<br /><img src="images/place-bellecour-miniature.jpg" alt="" />' + '<br /><a href="http://fr.wikipedia.org/wiki/Place_Bellecour">Voir l\'article sur Wikipedia (fr)</a>' ), new GInfoWindowTab('Metro', 'Metro A' + '<br />Metro D' ) ]; marker.openInfoWindowTabsHtml(tabs); }; GEvent.addListener(marker, "click", window); map.addOverlay(marker);
Le principe reste le même que pour l'exemple précédent, où la fenêtre d'informations ne comportait pas d'onglets : on ne relève que deux différences :
- Il faut créer les deux onglets,
- Et l'emploi de la méthode
openInfoWindowTabsHtmlà la place deopenInfoWindowHtml
En exécutant ce code (encore une fois, après intégration au squelette proposé en tête d'article), on obtient, selon l'onglet sélectionné, l'une des deux captures d'écran suivantes :
Pour le premier onglet, et ceci pour le second :
Notez tout de même qu'il vaut mieux ne pas abuser de ces fonctionnalités, sous peine que vos utilisateurs ne soient perdus...
Fenêtre d'informations maximisable
Et si vous n'avez toujours pas assez de place pour afficher vos informations avec une fenêtre multi-onglet, en particulier dans le cas où vous souhaitez afficher un grand texte informatif, vous avez la possibilité de rendre votre fenêtre maximisable.
Une fenêtre maximisée prendra la taille de la carte entière, ce qui vous offrira plus de surface pour afficher des information.
Notez que la fenêtre affichée en mode maximisée présente des informations qui sont spécifiques à ce mode, et plus les onglets qu'elle affiche en conditions normales.
Pour rendre une fenêtre maximisable, il faut passer en second paramètre à la fonction d'ouverture de fenêtre (openInfoWindowHtml ou openInfoWindowTabsHtml) un objet contenant les deux propriétés suivantes :
maxTitle: le titre que portera la fenêtre une fois maximisée,- et
maxContent: le contenu (au format HTML) qui sera affiché au sein de la fenêtre, une fois celle-ci maximisée.
Par exemple, pour afficher un long texte explicatif sur la fenêtre utilisée pour les exemples précédents :
var marker = new GMarker(coord); var window = function() { var tabs = [ new GInfoWindowTab('Infos', '<strong>Place Bellecour</strong>' + '<br /><img src="images/place-bellecour-miniature.jpg" alt="" />' + '<br /><a href="http://fr.wikipedia.org/wiki/Place_Bellecour">Voir l\'article sur Wikipedia (fr)</a>' ), new GInfoWindowTab('Metro', 'Metro A' + '<br />Metro D' ) ]; var options = { maxTitle: 'Place Bellecour, Lyon : Détails', maxContent: '<p><br />' + 'La <b>place Bellecour</b> est la plus grande place de <a href="http://fr.wikipedia.org/wiki/Lyon" title="Lyon">Lyon</a> et ' + 'la troisième plus grande place de <a href="http://fr.wikipedia.org/wiki/France" title="France">France</a> ' + '(après la <a href="http://fr.wikipedia.org/wiki/Place_des_Quinconces" title="Place des Quinconces">place des Quinconces</a> à ' + '<a href="http://fr.wikipedia.org/wiki/Bordeaux" title="Bordeaux">Bordeaux</a> et la <a href="http://fr.wikipedia.org/wiki/Place_de_la_Concorde" title="Place de la Concorde">place de la Concorde</a> ' + 'à <a href="http://fr.wikipedia.org/wiki/Paris" title="Paris">Paris</a>), ' + 'et avec une taille de 310 mètres par 200 mètres (elle est donc plus grande que le Zocalo de Mexico 230x192 et que la Place Rouge de Moscou 330x70). ' + 'C\'est également <b>la plus grande place piétonne d\'Europe</b>, les places précédemment citées pouvant accueillir des véhicules, ' + 'au contraire de la Place Bellecour.</p>' + '<p>En son centre se trouve une <a href="http://fr.wikipedia.org/wiki/Statue_%C3%A9questre" title="Statue équestre">statue équestre</a> de Louis XIV. ' + 'Une autre statue, représentant le <a href="http://fr.wikipedia.org/wiki/Petit_Prince" class="mw-redirect" title="Petit Prince">Petit Prince</a> ' + 'et <a href="http://fr.wikipedia.org/wiki/Antoine_de_Saint-Exup%C3%A9ry" title="Antoine de Saint-Exupéry">Antoine de Saint-Exupéry</a>, ' + 'est située à l\'extrémité ouest de la place.</p>' + '<p>Deux pavillons se trouvent également sur la place. Le premier abrite l\'Office du Tourisme, le second une galerie d\'art.</p>' }; marker.openInfoWindowTabsHtml(tabs, options); }; GEvent.addListener(marker, "click", window); map.addOverlay(marker);
Vous remarquerez l'apparition d'un bouton permettant de maximiser la fenêtre, en haut à droite de celle-ci :
Et une fois ce bouton cliqué :
Le bouton en haut à droite de la fenêtre se transforme, pour permettre de re-basculer vers le mode d'affichage normal.
Note : Si votre application est destinée à des utilisateurs avancés et/ou avertis, cette fonctionnalité vous servira peut-être. Par contre, dans le cas où votre application vise un public plus large, demandez-vous si elle sera utilisée par vos visiteurs : est-ce que ceux-ci ne finiront pas par être perdus au milieu de cet étalage technologique ?
Fenêtre d'informations avec styles CSS
Nous voici presque arrivés à la fin de cet article, et je réalise que les fenêtres d'informations que je vous ai présenté tout au long de celui-ci étaient graphiquement pauvre : aucune d'entre elles n'utilisait de fonctionnalités de mise en page par feuille de style CSS !
Heureusement, sela ne signifie pas que ce n'est pas possible !
Si vous définissez des styles au sein de votre page, que ce soit dans la partie <head> de la page (comme dans l'exemple ci-dessous), ou au sein d'une feuille de styles CSS externe, vous pourrez l'utiliser dans les textes de votre fenêtre d'information.
Par exemple, définissons deux styles (simples) au sein de la balise <head> de notre page :
<style type="text/css"> #metroA { color: #ed1c24; font-weight: bold; } #metroD { color: #00a650; font-style: italic; } </style>
Et utilisons les dans le second onglet de notre exemple - ici, pour afficher les couleurs des deux stations de Metro passant Place Bellecour :
var marker = new GMarker(coord); var window = function() { var tabs = [ new GInfoWindowTab('Infos', '<strong>Place Bellecour</strong>' + '<br /><img src="images/place-bellecour-miniature.jpg" alt="" />' + '<br /><a href="http://fr.wikipedia.org/wiki/Place_Bellecour">Voir l\'article sur Wikipedia (fr)</a>' ), new GInfoWindowTab('Metro', '<span id="metroA">Metro A</span>' + '<br /><span id="metroD">Metro D</span>' ) ]; marker.openInfoWindowTabsHtml(tabs); }; GEvent.addListener(marker, "click", window); map.addOverlay(marker);
Et voici une capture d'écran du rendu obtenu :
Comme nous pouvons le constater, nos styles ont bien été pris en compte à l'intérieur de la fenêtre d'informations 
Navigation :
- Retour au sommaire : utilisation de l'API Google Maps.
- 1 : Afficher une carte avec Google Maps : Les premiers éléments à mettre en place pour intégrer une carte à une page Web.
- 2 : Obtenir les latitude et longitude d'un point à partir de son adresse : Utiliser le service de Geocoding proposé par Google Maps, pour "traduire" une adresse en un couple latitude/longitude.
- 3 : Types de cartes et contrôles : Les différents types de carte que le service Google Maps permet d'afficher, et les différents contrôles que vous pouvez leur ajouter.
- 4: Marqueurs et fenêtres d'informations : Afficher des marqueurs et des fenêtres d'informations sur vos cartes
Pour être averti lors de la publication de nouvelles entrées, n'hésitez pas à vous abonner au flux RSS ou ATOM des articles de mon blog !














Commentaires
Très bon tutoriel !
Merci
Bonjour, merci pour ce tutorial très riche
)
J'ai un souci (tiens comme c'est étrange
Je n'arrive pas à marier les fonctions de l'exemple 5 (plusieurs marqueurs personnalisés par thèmes) et celles de window 2 (infos par onglets sur chaque marqueur).
J'ai essayé un peu dans tous les sens, rien à faire. Une petite piste ?
Par ailleurs, je me souviens avoir vu des marqueurs 'par défaut' de googlemap (genre les drapeaux, des arbres, des maisons, etc... Impossible à remettre la main dessus.
Merci de votre aide !
Merci à tous deux pour vos commentaires !
Chandon > Désolé, votre commentaire avait été classé en spam... le temps de le re-classifier... Et le voila en ligne !
Pour répondre à votre question, quelque chose de la forme suivante devrait coller, en théorie :
var window = function() {var tabs = [
new GInfoWindowTab('Infos',
'<strong>Ligne : ' + infosStation.ligne + '</strong>' +
'<br />Station : ' +
infosStation.loc
),
new GInfoWindowTab('Autre ^^',
'A vous de trouver de quoi parler ici ;-)'
)
];
marker.openInfoWindowTabsHtml(tabs);
};
GEvent.addListener(marker, "click", window);
Typiquement, en insérant cette portion de code entre la création du marqueur (fonction
createMarkerdans mes exemples), et son ajout à la carte (une fois la fonction terminée), les fenêtres d'informations devraient apparaître lors de clics sur ceux-ci.Suite à votre question, je viens de mettre à jour le fichier joint à cet article, en ajoutant deux exemples :
- exemple-X-marqueurs-perso-et-windows.js : Ajout de fenêtres d'informations sur des marqueurs personnalisés (version "moche" ^^ )
- exemple-X-marqueurs-MapIconMaker-et-windows.js : Ajout de fenêtres d'informations sur des marqueurs créés à l'aide du
Dans un cas comme dans l'autre, j'ai inclus une version avec une fenêtre sans onglet, et une version avec onglets (il faudra commenter/décommenter dans le code)MapIconMarker.Pour ce qui est des marqueurs "par défaut", par contre, il ne me semble pas avoir noté le lien non plus
Un tour de google donne des choses de ce genre : http://mapki.com/index.php?title=Icon_Image_Sets ; est-ce que cela correspond ?
En espérant que cela répond à votre question,
Bon courage !
PS : j'oubliais : Félicitations Chandon, vous venez de faire le 100ième commentaire posté sur ce blog !
Merci pour votre réponse, je vais essayer avec ça


En fait ma carte fonctionnait correctement (sans les onglets) avec l'ancienne méthode, mais là j'ai profité de votre tuto pour essayer de tout reprendre, et ça a coincé
Je vous tiens au courant, merci pour votre 'service après vente'
Sinon, j'ai fini par remettre la main sur les icones custom google
http://econym.googlepages.com/geico...
Et merci pour le lien %)
ça marche au poil, un vrai bonheur, merci pour ce site
Excellente série d'articles. Merci d'avoir partagé ces trouvailles.
A quand un "mapmaker" vraiment complet ?
Ciao
Greg
Je suis à fond dans l’apprentissage de cette API afin de l’utiliser dans mon projet de site Web et là, après avoir passé en revu tous tes articles, j’ai l’impression de respirer, encore merci.
Je suis impatient de lire tes prochains articles comme celui sur les « Event » de l’API.
Merci pour vos talents !
Cela m'a bien servi dans le développement de mon site.
En espérant que d'autres astuces s'ajouteront à cette liste
Peut-être ^^
Pas tout de suite, cela dit : je n'ai pas eu l'occasion de toucher à google maps ces derniers temps... Par contre, pour rester aux technos google, il se peut qu'une paire d'articles arrivent à propos de google gears, que j'ai commencé à utiliser sur un autre projet ^^
Bonjour,
tes articles sont sympa et illustres
les explications sont claires
en deux mots : vraiment super
merci
a bientôt j'espère, pour un commentaire sur un futur article sur les évènements de l'api ?!
alex
Bonjour,
Merci pour ce tuto particulièrement précis et très complet.
Par contre je me posais une question :
Est-il possible d'avoir, dans un onglet, un "showMapBlowup" du lieu en question avec un zoom plus important et dans un autre onglet un descriptif?
Je n'ai pas encore trouvé la réponse.
Merci d'avance
J'aime avoir à la fois la question, et la réponse !
(désolé, la réponse était passée en spam ; le temps de la publier, et la voici
Merci pour vos commentaires
Bonjour,
Félicitations pour la qualité de votre blog.
J'ai une petite question (qui n'a qu'un vague rapport avec la choucroute) mais je me lance quand même :
Comment réaliser une interface à la mode de l'i-phone et confrères pour l'utilisation conjointe d'un GPS et de googlemaps ?
Je ne suis pas clair ? Oui c'est vrai je ne suis pas très clair, alors je précise :
Disons que j'ai un GPS dont grâce auquel je lis des coordonnées en longitute et latitude. Comment faire pour centrer une carte Google Maps sur ces coordonnées ? La réponse est peut-être triviale, je n'arrive pas à me faire une idée en browsant... Est-il possible avec quelques lignes de javascript de récupérer des coordonnées... peut-être dans un fichier, ou via quelquechose de plus évolué. Bref, vous m'avez l'air compétent en la matière, je ne le suis pas, je me permets de vous poser la question. Ca se trouve la réponse n'a aucun intérêt !
En tout cas merci pour votre blog.
Immense merci pour ces tutoriaux super bien faits... il suffit de suivre et tout s'enchaîne
Bravo.
Bonjour,
Etienne > malheureusement, aucune idée "générique" ne me vient à l'esprit : si votre GPS a un mode d'export de données, ça sera un plus ; mais il restera toujours le problème de "comment accéder à ces coordonnées via JS, qui ne sait pas accèder à quelque chose en dehors du navigateur".
Typiquement, JS ne permettra pas d'accéder à un fichier dans lequel le GPS stockerait les coordonnées courantes...
w3clic > Merci
Bonjour à tous,
J'ai un problème avec l'HTML dans les onglets le voici :
Je dispose de nombreux pointeurs sur ma carte (>1500) et les onglets affichent des pages web sur d'autres serveurs, via une balise <object>, avec un système de variables identiques pour tous les serveurs.
ex : pour le pointeur 1, le premier onglet affiche www.serveurA.com/?id=1, le second affiche www.serveurB.com/?id=1, etc...
Mais, puisqu'il y a un mais, l'API veut précharger tous les onglets dès l'affichage de la carte. Et, ce qu'il se passe, c'est que les serveurs A et B acceptent d'afficher quelques requetes, puis bloquent les suivantes (ce qui est normal quand on envoie 1500 demandes d'affichage d'un coup).
Ce que j'aimerais, c'est que l'onglet se charge si et seulement si on clique dessus pour l'afficher...
Avez vous une idée du "comment faire ?"
Cordialement,
Matthieu
Bonsoir,
L'extension "ExtInfoWindow" répondrait peut-être à votre problème : elle permet de charger le contenu d'une fenêtre d'informations via une requête Ajax, au moment où l'utilisateur clique sur le marqueur déclenchant l'ouverture de la fenêtre.
Pour plus d'informations, vous pouvez jeter sur un oeil sur :
En espérant que ça réponde à votre question,
Bon courage !
PS : 1500 marqueurs sur une carte ? Vous n'avez pas peur que ça fasse un peu trop pour vos utilisateurs (et les capacités de leurs machines) ?
ça m'a l'air très interressant merci !
Pour le PS, sur ma petite bécanne, ça ne plante pas. Il faut 1 à 2 secondes pour charger le tout.
Pas de problème
Bon courage !
PS² : ok
Alors, après une petite nuit passée à apprivoiser tout celà, ça fonctionne. ça "rame" un chouia plus quand même, surtout avec IE.
D'ailleurs, chose interressante, j'ai aussi découvert que pour faire fonctionner l'API avec IE et une liste de coordonnées dans un xml, il suffit de passer de la version 2 à la version 2.89
Enfin, le dernier problème à résoudre vient du script ExtInfowindow qui me place "idéalement" l'infobulle... idéalement oui si on a un niveau de zoom élevé. sinon, la carte tourne litérallement en rond ! (on voit ça sur le dernier exemple de la liste)
IE n'a pas vraiment le moteur Javascript le plus performant, de manière générale ; pas étonnant que ça soit celui qui rame un peu plus ^^
)
(Mais malheureusement, sur un site non orienté utilisateurs "informaticiens", difficile de ne pas supporter IE
Merci pour l'astuce
Pour votre dernier point, par contre, je ne saisis pas ^^
J'admets que le fait que la carte se déplace "toute seule" n'est pas forcément agréable ; mais "tourne en rond" ?
Un grand merci pour ces articles
Bravo, et merci.
Mais je sèche sur un point: j'ai 83 marqueurs sur ma carte et des tableaux
Nom[x]="nom_dolmen",Photo[x]="chemin_image.jpg".Je fais une boucle, mais le passage de la chaîne par
Nom[x]+'<br /><img src=Photo[x]..est impossible:img srcn'accepte pas de variables. J'ai essayé le php, le perl... et parcouru le net sans trouver de réponse.Pouvez vous m'aider ?
Bonsoir,
Ne vous est-il pas possible de générer un contenu HTML pour chaque fenêtre sur un marqueur ? Sans avoir à manipuler la propriété
srcdes balisesimg, mais directement en générant lesdites balisesimg, entières ?En fait, pour donner un exemple, quid de quelque chose qui ressemble à ceci :
(En adaptant, bien évidemment, pour utiliser vos propres noms de variables -- et en gérant ce qui est éventuel échappement du contenu des variables avant injection dans le code HTML)
Est-ce que cela ne répond pas à votre besoin ?
(Ou est-ce que j'ai mal compris la question ? ^^)
Quoi qu'il en soit, Bon courage !
Bonjour,
merci pour cet article très instructif, j'ai cependant une question, dans le cas de "multi marqueurs" je n'ai pas réussi a ajouter la window pour chacun d'entre eux.
je l'appelle dans la boucle qui parcours mon tableau d'informations sur les marqueurs
et j'ai comme erreur :
redeclaration of const windowavez vous une idée ?
merci
Bonsoir,
Tres bon script, mais j'aurai voulu savoir s'il y a moyen de rajouter un petit lien ou autre sur ma bulle de mon marqueur, pour dire "Zoomer vers ce point" pour zoomer sur le point choisi donc.
Je ne sais pas si vous voyez ce que je veux dire.
Merci et bonne continuation pour ce super script.
Bonjour,
vince > vous utilisez dans la ligne suivante une fonction que vous avez nommé "
window" :J'imagine donc que, ailleurs dans votre script, vous avez quelque chose qui ressemble à ceci :
Mais en Javascript, il existe déjà, pour le navigateur, un objet nommé "
window", qui désigne la fenêtre au sein de laquelle vous travaillez. Et cet objet est constant : il ne peut pas être modifié.=> Au moment où vous définissez une fonction nommée "
window", vous entrez en conflit avec cet objet "window" déjà existant, et vous prenez l'erreur "redeclaration of const window" -- testé et reproduit sous Firefox.(d'ailleurs, si vous utilisez quelque chose du genre de firebug, vous verrez que le numéro de ligne où se produit l'erreur est celui où votre fonction "
window" est définie, et non celui de la ligne où elle est appelée).Nommez votre fonction autrement, et il y a des chances que les choses fonctionneront mieux
taramite > ça doit pouvoir se faire ^^
Si vous ajoutez dans votre infowindow un lien, et qu'un clic sur ce lien entraine le recentrage de la carte, avec un niveau de zoom supérieur au niveau actuel, vous devriez obtenir l'effet que vous souhaitez.
Par exemple, avec quelque chose de ce genre là :
(en adaptant, bien entendu, pour avoir des noms de variables qui collent avec les votre, notamment pour "
data")Si votre carte, initialement, affichait une vue très lointaine (genre vue mondiale), un clic sur le lien dans l'info window centrera la carte sur le point correspondant au marker, et zoomera.
(le niveau de zoom pouvant s'adapter via le second paramètre de
setCenter).A noter : pour que ça fonctionne, ici, "
map" doit être une variable globale.En espérant que ça réponde à votre question,
Bon courage !
Salut !
Merci beaucoup pour tes tutos vraiment utiles et bien fait
Cepandant j'aurais besoin de la liste des arrets de tramway de Lyon et je ne les trouve pas dans tes archives ...
Les auraient tu gardées?
Merci d'avance
Bonjour,
Merci pour ce super tuto! J'ai un site qui sert a répertorier les produits gourmand (terroir)du Québec. J'aimerais ajouter dans mes bulles d'information google map un liens qui servirais au utilisateur du site a ajouter ce produits a une liste de leur produits préférer. Un peu comme le site:http://www.velib.paris.fr/trouver_u...
Avez-vous une idée sur comment je pourrais réaliser ce liens.
Merci
Bonjour,
Merci pour ces deux commentaires ; je réponds quelque peu en retard : congés sans Internet, puis reprise un peu chargée ^^
Batstoon > Dans le fichier joint à cet article, tu as les sources des exemples utilisés ; la liste des arrêts doit se trouver dedans (dans
exemple-6.jsà priori, il y a à la fois metros et trams)Par contre, je ne garanti pas la précision : pour ne pas repomper la liste quelque part, j'ai pris google maps, j'ai parcouru "à la main" chacune des lignes, et j'ai relevé la liste des positions...
Stéphane > As-tu jeté un œil à ce que faisait le site pour les velibs ? Dans le texte HTML de la fenêtre d'information, tu as un lien (balise
<a>), qui comporte unonclick, qui appelle une fonction JS, fonction JS qui effectue l'appel Ajax qui va bien.=> Tu dois pouvoir mettre en place le même mécanisme relativement facilement
Bonne année à tous deux, et bon courage !
Pascal M.
Merci pour ce tuto très intéressant.
Je bloque tout de fois sur un point. Peux tu m'aider un peu?
En effet, le script ci_dessous n'affiche que la carte et j'avoue ne pas voir l'erreur probablement tout simple.
Avec mes remerciements
Phi
[edit par P. Martin] Pour des raisons de lisibilité (et un problème de mise en forme des commentaires par ma plate-forme de blog), j'ai reformaté ton code source.
Bonjour,
En regardant le code, et testant pour voir ce que je peux faire, dans l'ordre :
Pourquoi est-ce que la boucle suivante :
commence à 1, et non à 0 ?

En Javascript (comme en C, PHP, JAVA ...), le premier élément d'une liste est à l'indice 0, et non 1 (Contrairement aux langages issus de BASIC, notamment).
=> Avec ce code, ça n'affichera qu'un seul point (le second), en ignorant celui d'indice 0 (le premier)
=> En mettant
var i=0, tu auras quelque chose de plus proche du comportement (probablement) souhaité.Ensuite, effectivement, on ne voit pas de marqueur s'afficher
Dans ce genre de cas, la première chose à faire, par sécurité, et de dézoomer, pour avoir une vue plus globale.
Par exemple :
Et là, on se rend compte que les deux marqueurs (qui semblent ne faire qu'un, à cette distance) sont affichés, mais en Afrique de l'est (Somalie, à priori), et non en France !
Si je regarde dans ton code, Saint Étienne est déclaré comme ayant une latitude de 45° et une longitude de 4° ; d'après wikipedia, c'est bien ça
=> le problème doit être à l'affichage, et non à la déclaration.
Dans la fonction
createMarker, tu utilises ceci :Est-ce que l'inverse, à savoir :
Ne serait pas plus approprié ?
(Après vérification, avec cette modification, les deux marqueurs apparaissent, en France, aux environs de St Étienne ^^ )
Pour résumer, donc :
GPoint.En espérant que cela réponde à ta question et te permettre d'avancer,
Bon courage !
Merci pour tes conseils.
J'avais effectivement passé la var i à 1 pour faire un essai et j'ai oublié de la repasser à 0.
Pour le problème des coordonnées, je ne comprends pas trop le bug mais bon j'inverse.
Malheureusement pour moi, j'ai toujours une erreur et les marqueurs ne s'affichent pas. Je vais essayer de contourner le problème par un autre moyen.
Encore merci pour ce super tuto et pour les petits conseils de raisonnement.
Phi
Bonjour,
Pour localiser les adhérents à notre association j'utilise l'API de google.
Jusque là tout va bien mais je n'arrive pas à afficher la photo de chaque adhérent.
http://www.fngcp.fr/cartes/carte/ca...
la photo se trouve dans le 2ème onglet.
' <img scr= "' + pointData.pic + '" width="80" heigth="80" alt=""> '
et dans le fichier Json je déclare ceci:
$json = "\t\t'pic': '".$row
Avec un peu de chance, tu trouveras un élément de réponse là-dedans
(Cela dit, quel type d'erreur te prends-tu, à tout hasard ? )
fngcp > Bonjour,
Avez-vous modifié quelque chose depuis que vous avez posté votre commentaire ?
Par exemple, en cliquant sur un des marquerrs, j'ai la photo suivante qui est chargée, et affichée :
http://www.fngcp.fr/cartes/donnees_geoloc/photos/1230039800_Logofngcp.jpg
Mais ce dans le premier onglet.
Sinon, à tout hasard, assurez-vous que vous n'avez pas de 404 dûes à une URL d'image éventuellement mal formée ?
(Ou plus d'informations sur le problème précis ? Un problème dans les données JSON ? Que donne le code HTML entier de l'onglet ? ... ? )
Quoi qu'il en soit, bon courage !
PS : le bout de JS pour essayer de désactiver le clic droit, c'est particulièrement lourd (ça aide absolument pas à fouiller dans l'appli avec firebug, en plus de cela ^^ )... Et ça n'empéche pas les gens un minimum motivés de trouver comment cliquer quand même ^^
Bonjour et merci pour votre réponse,
Effectivement j'ai changé quelque chose, j'ai ajouté le logo qui s'affiche sur le premier onglet et ça c'est commun à tous les onglets.
Mais je n'arrive toujours pas à afficher la photo du contact sur le 2ème onglet:
Voici le code html de l'onglet en question:
var tab1 = new GInfoWindowTab ("President", ' <table border=0><tr><td>' + ' <img scr= "' + pointData.pic + '" width="80" heigth="80" alt=""> ' + ' </td><td> ' + '<span>' + '<i> ' + 'Président(e)' + ' </i> ' + ': ' + ' ' + '<strong>' + '<font color="#993300">' + pointData.nom + ' ' + pointData.prenom + ' ' + ' </font></strong><br/></span> ' + '<br/>' + '<span>' +'<i>' + ' ' +'<strong>' + '<font color="#993300">' + pointData.fonction +'<strong></font>' + ' </td></tr></table>' +' ' );Et voilà les données Json:
@@$json = array("[");
$tab = "\t{";
while ($row = @mysql_fetch_assoc($result)){
$json = $tab;
$json = "\t\t'latitude': ".$row
suite à mon précédent message:
et lorsque l'on appelle le fichier Json cela donne ceci:
Extrait:
@@[
{
'latitude': 46.5213438,
'longitude': 3.6817793,
'departement': '03 allier',
'nom': 'XXXXXXX',
'prenom': 'Xxxxxxx',
'fonction': '',
'societe': 'F.D.G.C.P. 03',
'siege': 'Chez le Président',
'phone': '04 70 00 00 00,
'phone2': '06 00 00 00 00',
'num': '270',
'commentaire': '',
'pic': '1231495682_FNGCP_nom.gif',
'adresse': 'rue du .',
'codepostal': '03290',
'localite': 'Dompierre sur Besbre',
'email': '',
'website': ''
}
}
];@@
Et comment le vérifier ?
Merci
Rebonjour,
C'est bon j'ai résolu mon problème.
C'était effectivement un problème d'URL de l'image qui n'était pas bon, j'ai corrigé et cela fonctionne.
Merci pour votre aide.
Bonjour,
OK, parfait
(désolé pour la réponse tardive... La semaine dernière un peu chargée...)
Bonne continuation !
Bonjour, je me permets de poster car vous avez l'air de bien maitriser le sujet. J'affiche la carte + markers générés par du php. Je souhaiterais que lorsqu'on clique sur un marker (l'info bulle s'affichant en mouseover), cela renvoie vers un lien html mais je séche depuis 2 jours et je n'ai rien trouvé sur le net.
Si vous pouviez m'éclairer, un grand merci d'avance.
Bonsoir,
J'imagine que pour brancher l'affichage de la fenêtre d'information sur le survol, vous avez utilisé quelque chose de ce type :
var afficherInfos = function() {marker.openInfoWindowHtml(
'<strong>Place Bellecour</strong>' +
'<br /><img src="images/place-bellecour-miniature.jpg" alt="" />' +
'<br /><a href="http://fr.wikipedia.org/wiki/Place_Bellecour">Voir l\'article sur Wikipedia (fr)</a>'
);
};
GEvent.addListener(marker, "mouseover", afficherInfos);
(Branchement d'un gestionnaire sur l'événement "
mouseover" (ou un autre événement du même type), qui affiche la fenêtre d'information)Si oui, pourquoi ne pas utiliser quelque chose ce genre pour déclencher l'ouverture d'une autre page lors du clic sur le marqueur :
var actionClick = function () {window.location.href = 'http://fr.wikipedia.org/wiki/Place_Bellecour';
};
GEvent.addListener(marker, "click", actionClick);
Globalement, vous branchez un gestionnaire d'événement sur l'événement "
click", et ce gestionnaire d'événement ne fait rien d'autre que changer l'URL sur laquelle pointe votre navigateur.En espérant que cela réponde à votre question,
Bonne soirée !
Salut Pascal,
Merci pour la liste des transports en communs de lyon, ca m'a été très utile
Pourrais tu me renseigner sur une chose : J'ai bien cherché, mais je n'ai trouvé nul part comment changer la forme de la bulle d'aide de google map
Sait tu si cela est possible?
Bye
bonjour, j avais une tite question et je ne vois pas trop comment faire .
sur une map je dois créer un rectangle(comme dans windows par exemple ou on peu sélectionner plusieurs dossier), je dois représenter cela afin de selectionner le contenu du rectangle.je sais pas si je suis tres clair .
donc si ta une solution suis preneur.
merci
bonne journée
Batstoon >
Pas de problème pour la liste
A noter : depuis quelques semaines, Google Maps propose une fonctionnalité d'affichage des lignes de Transport en commun, pour certaines villes de France -- dont Lyon.
(Je n'ai pas encore eu l'occasion de m'amuser avec, ni de voir si ça pouvait se manipuler ne serait-ce qu'un minimum, mais on doit pouvoir en tirer quelques trucs intéressants, avec un peu de chance ^^ )
Pour ce qui est de la forme des bulles d'informations, je n'ai pas souvenir d'avoir entendu dire un jour qu'il soit possible de modifier leur forme
Et une recherche rapide dans la doc de l'API ne ramène pas grand chose qui semble utile 
Désolé...
ralou >
Je ne réussi pas à retrouver dans mon répertoire de codes de tests d'exemple qui corresponde à ce à quoi je pense, mais ce genre de chose peut être obtenue en utilisant l'objet GPolyline pour tracer 4 lignes, formant un rectangle.
C'est peut-être aussi faisable en utilisant GPolygon, mais je n'ai jamais essayé.
Pour plus d'information, vous pouvez jeter un œil sur Polylines Overview, et sur Polygons Overview, dans les tutoriaux de l'API Google Maps.
Quoi qu'il en soit, bon courage !
Tout d'abord, merci pour ce tuto très fourni
Ensuite j'ai une piste pour ralou:
Création d'un array (variable tableau) contenant les coordonnées des points délimitant le tracé du polygone.
Au tableau de coordonnées "monpolygone" est associé une série de propriété : "#990000", 5, 1, "#ff0000", 0.2".
Celles-ci correspondent à :
Bonne journée
PS: Désolé pour la mise en forme, j'ai pas reussi a me servir des balises de codes -_-"
Bonsoir,
Merci pour cette réponse
Ne vous en faites pas pour les balises code : il faut que je retouche un truc ou deux au niveau du plugin que j'utilise pour la mise en forme des commentaires : la balise "code" ne fonctionne pas en multi-lignes... Il faut que je vois pour activer une balise "pre"... Quitte à l'implémenter ^^
ok je vous remercie pour votre aide désolé je viens de voir le message en faite
mais j avais réussi a la faire en faite en me cassant un peu plus la tête mais avec du mal.
cependant sa correspondait po au attente car par la suite je devais modifier le curseur pour agrandir ou réduire la taille du rectangle.
du coup j ai fait une div sur la map et me suis débrouillé avec une classe que j ai récupéré
merci quand mm
si sa intéresse la classe pour agrandir rétrécir et tout un rectangle est sur : http://blog.oli-web.com
merci pour le tuto qui ma bien servi
Hello,
d'abord merci bien pour cet article, il est très instructif !
Ensuite j'aurai une petite question :
Comme dans ton exemple avec une adresse qui retourne plusieur coordonnées (exemple avec Beaurepère) je voudrais afficher plusieur "marker" mais en passant une adresse du genre "hotel, ville, france" et pouvoir récupérer les differents hotels.
dans ton exemple le geocoder.getLatLng retourne plusieur coordonnées, mais en passant "hotel, ville, france" il n'en retourne qu'une seule.
Es ce qu'il y a un moyen d'obtenir les différentes corrdonnées de mon adresse ?
Merci pour ta réponse et bonne continuation !
Bonsoir,
Tout d'abord, merci
Difficile à dire comme ça, mais je suppose que si le service de geocoding ne retourne qu'une seule adresse, c'est "voulu" :
D'un autre côté, en jetant un coup d'œil à la doc de l'API, est-ce qu'il ne serait pas intéressant d'utiliser la méthode
getLocations, plutôt quegetLatLng(Cf http://code.google.com/intl/fr/apis/maps/documentation/reference.html#GClientGeocoder ) : la doc dit que la première méthode renvoi potentiellement plusieurs résultats, alors que la seconde n'en renvoit qu'un seul (les coordonnées du point répondant "le mieux" à la requête).D'ailleurs, après réflexion, dans le second article de cette série, c'est la méthode
getLocationsque j'ai utilisé, justement en prenant "Beaurepaire" comme exemple, dans le cas où je souhaitais obtenir plusieurs résultats...Qu'en pensez-vous ?
Quoi qu'il en soit, bon courage, et bonne continuation !
Bonjour,
très bien les explications.
j'ai une question sur la création d'un bouton dans une infobulle sur google maps. Ce bouton situé dans une info bulle est lié à un polygone, il permettrait de désafficher le kml lié et d'en afficher un nouveau.
Merci par avance
Bonjour,
Je trouve votre site tres bien expliqué, ça m'a tres bien servit (les onglets c'est vraiment sympa je savais pas qu'on pouvais en mettre).
Par conter, j'aurais une petite question, je cherche à afficher directement ma bulle d'info à l'affichage de ma carte sans passer par un clik et je ne sais pas comment faire.
Auriez vous une idée ?
Merci
Steph
Bonsoir,
Merci
Pour répondre à votre question : sans vraiment chercher à tester dans les détails, mais est-ce qu'il ne serait pas possible de brancher une fonction sur l'événement "load" de la carte ? Et que cette fonction soit responsable de la création du marqueur ainsi que de l'ouverture de l'infoWindow lui correspondant ?
Typiquement, quelque chose dans ce genre :
Ça devrait faire l'affaire, non ?
En somme, au chargement de la carte, on crée un marqueur, on l'ajoute à la carte, et on affiche sa fenêtre d'informations.
Quoi qu'il en soit, bon courage !
Salut,
Vraiment super ton tuto !
Très bon boulot.
Il ne me reste plus qu'une question, pour les marqueurs si on n'a pas les coordonnées latitude et longitude, ont fait comment (a partir de l'adresse donc)?
Merci
Bonjour,
Merci
Dans le cas où vous connaissez l'adresse d'un point, mais pas ses latitude/longitude, il vous faudra déterminer celles-ci, pour pouvoir afficher le marker "où il faut".
Pour cela, vous pouvez envisager de passer par l'API du service de GeoCoding ; Cf par exemple mon article google.maps.ClientGeocoder : latitude et longitude d'un point à partir de son adresse, pour plus d'informations
Par contre, pour éviter de réaliser des milliers d'appels à l'API, vous pouvez envisager de charger la latitude/longitude d'un point à partir de son adresse au moment de sa création, plutôt que de les obtenir uniquement au moment de l'affichage... En les stockant en base de données (ou autre) entre temps, comme vous le faite déjà probablement pour l'adresse.
Bon courage !
Félicitation pour vos articles. Clarté, concision, pédagogie, tout y est !
Avant de découvrir votre blog, j'ai fait quelques essais avec la classe GoogleMapAPI en PHP .
La connaissez-vous ?
Quels avis critiques (les + comme les - ) avez vous ?
Elle me parait "ancienne" : est-elle fiable et dispose-t-elle d'une communauté suffisante à la faire vivre ?
Cordialement,
Jean
Bonjour
J'ai créé un tableau de points, un tableau de markers et un polygone qui les joint. Tout cela s'affiche très bien sur la carte (merci à Pascal pour le tutoriel). J'ai essayé de faire afficher bonjour si on clique sur un quelconque de ces markers. Mais cela ne dit pas bonjour ! Voici ma méthode :
var initMap = function () { var map = new google.maps.Map2(document.getElementById('map')); map.addControl(new GLargeMapControl()); map.addControl(new GScaleControl()); var points =[]; points.push(new GLatLng(46.536665,0.415486666667)) ; points.push(new GLatLng(46.5287533333,0.418166666667)) ; //... points.push(new GLatLng(46.5443883333,0.415238333333)) ; var nbr_etap = points.length ; var som_lat = 0 ; var som_lng = 0 ; for (i=0; i<nbr_etap; i++) { som_lat = som_lat + points[i].lat() ; som_lng = som_lng + points[i].lng() ; } var pointcentral_lat = som_lat/nbr_etap ; var pointcentral_lng = som_lng/nbr_etap ; var pointcentral = new GLatLng(pointcentral_lat,pointcentral_lng); //partie 1 : instanciation du tableau des markers var i=0 ; var markers =[]; for (i=0; i<points.length; i++) { markers.push(new GMarker(points[i])); } //creation d'une ligne polygonale bleue, largeur 4 pixels : var polyline = new GPolyline(points, "#0000ff", 4); // niveau de zoom 13/18) map.setCenter(pointcentral, 13);map.clearOverlays(); //partie 2 : declaration de la fonction rattachée à chaque markers for (i=0; i<points.length; i++) { var window = function (){ markers[i].openInfoWindowHtml('bonjour'); }; } //partie 3 : la fonction est rattachée au clic sur chaque markers for (i=0; i<points.length; i++) { GEvent.addListener( markers[i],"click",window ); } //partie 4 : ajout des markers sur la carte for (i=0; i<points.length; i++) { map.addOverlay(markers[i]); } map.addOverlay(polyline); }; // initMapSi quelqu'un a une idée ?
A bientôt.
Bonjour !
j'ai une petite question : est-il possible de mettre un titre (genre le nom du monument désigné par le marqueur) dans une minimap ?
merci !
J'ai un souci avec les markers que je n'arrive pas à régler :
Je t'invite à regarder ma page : http://www.trackmypals.com/index.html lorsque je clique sur un marker, le marker se centre au milieu en haut de la map alors que je voudrais que le point se centre au milieu de la carte. Si tu trouves où ça bug ça m'intéresse carrément ...
Autre question : Est-il possible d'afficher le
openInfoWindowHtmlavec un z-index afin qu'il apparaisse au dessus de la carte et s'il faut qu'il déborde de l'espace de la carte pour qu'il soit plus visible ?Merci d'avance
Anthony
Bonjour,
j'ai une question moi aussi XD
Est il possible de faire une polyline avec infobulle tirant les données d'un fichier xml, j'ai déja les marqueurs tirés du fichier xml mais je ne trouve pas la fonction adéquate pour la faire sous javascript/html pourtant elle a l'air d'éxister sur le site de google maps.
Si quelqu'un a la réponse merci,
Cordialement,
Mathieu
Bonjour,
J'ai mis en oeuvre les solutions que vous proposez sur ce tuto. Malheureusement si sous IE8 et FF les choses se passent bien, sur IE7, les marqueurs ne s'affichent pas et j'ai une erreur qui se produit dans un fichier .js (fournit pas google) qui est absolument imbitable. Est-ce que des gens auraient des pb d'affichage sous IE7 et pas IE8 ? Des idées.
Cordialement
Petite précision : l'erreur se produit à chaque affichage d'un marqeur. J'en ai 4 actuellement sur la carte donc quatre erreurs consécutives.
Fantastique tuto et explications ! Félicitation à tous les fondus de codes!
Je crée en ce moment une communauté de village et me heurte à un petit problème.
J'ai une carte Google map embarquée sur mon site et je souhaiterai que les membres puissent poser un marqueur à l'emplacement de leur maison.
Comme tout le monde habite le même village il n'y a pas éparpillement des données !
Mais je ne trouve pas comment permettre à d'autres personnes de poser des marqueurs sur ma carte perso.
Il faudrait évidement que cela soit simplissime, qu'un enfant puisse se localiser sans avoir à parler html.
Si quelqu'un à une idée ....
Cordialement,
jpp
Bonsoir,
@gitana > à tout hasard, si le problème se produit toujours (même chose si d'autres problèmes de ce type venaient à se poser à l'avenir ^^ ) :
@jpp > en branchant un gestionnaire d'événement sur l'événement click de la carte, il doit être possible d'obtenir les coordonnées correspondant au point où l'internaute souhaite placer un marqueur. Ensuite, idéalement, il faudrait aussi gérer son drag and drop -- il doit y avoir moyen de détecter ça aussi...
- Par exemple, pour ce qui est de la détection de l'endroit où l'utilisateur a cliqué sur la carte, il faudra se brancher sur l'événement GMap2.click
- Et pour détecter la fin du drag and drop d'un marker, GMarker.dragend devrait faire l'affaire.
- Dans un cas comme dans l'autre, la fonction utilisée comme gestionnaire d'événement devrait recevoir les latitudes/longitude du point sélectionné par votre utilisateur.
Bon courage !Salut !
Déjà merci pour ton article, il est vraiment super instructif !
J'avais par contre une petite question... En fait quand j'affiche un marker j'aimerais aller chercher des infos en ajax, car j'ai 2 onglets à faire, le deuxième comportant un petit texte qui n'est évidement pas déjà présent sur la page et qui doit apparaître uniquement si on ouvre l'onglet (ou si on click sur le marker, ça serait déjà génial)... J'ai essayé de chercher un peu mais j'ai rien trouvé. En gros je voudrais que sur :
GEvent.addListener(marker, "click", window);
à la place de "window" je puisse appelé une fonction en lui envoyant un paramètre pour qu'il me retourne le contenu du marker. J'avais réussi à le faire mais en fait il fait les appels directement à la base quand le js se charge...
Merci d'avance !
Sébastien
Bonjour,
Merci pour ce tuto !!
Cependant j'ai un souci d'affichage des info bulle sous IE.
Sous firefox tout fonctionne. Avec IE, il me dit qu'il y a une erreur dans ma page.
Mon google API fait appel à un fichier xml pour les coordonnées et les infos des markers.
voici le code :
<script type="text/javascript">
//<![CDATA[ function initialize() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(48.863673, 2.3445384), 10);map.setUIToDefault();
function creerMarker(point, onglet1, onglet2) { var marker = new GMarker(point); var infoTabs = [ new GInfoWindowTab("Adresse", onglet1), new GInfoWindowTab("Fichiers", onglet2), ]; GEvent.addListener(marker, "click", function() { marker.openInfoWindowTabsHtml(infoTabs); }); return marker; } GDownloadUrl("donnees.xml", function(data) { var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")), 9); var marker = creerMarker(point, markers[i].getAttribute("info"), markers[i].getAttribute("details")); map.addOverlay(marker); } }); } } //]]> </script>Je n'arrive pas à comprendre le pourquoi du comment !
Merci d'avance pour votre aide.
Vincent
Bonjour,
je souhaite insérer une légende pour afficher/désafficher des thématiques.
Auriez vous un code à me proposer ?
Merci d'avance !
Bonjour,
Tout d'abord félicitation pour ce tutoriel, bien plus clair que les "aides" de google.
J'ai une petite question de newbie, j'aimerais bcp générer la liste des marqueurs avec du php... Le soucis c'est que je ne sais pas faire le lien entre mon code php qui génére le tableaux des points que je veux afficher et le javascript.
Cela est-il possible ? et si oui comment faut-il faire.
Merci
Bonjour Pascal MARTIN,
Je suis sur Lyon et je recherche quelqu'un pour me développer une petite application API google maps ?
Pourriez-vous m'aider et/ou me contacter pour que je vous expose en détails mon projet ?
Merci d'avance et bon week end.
Rémi
Un grand merci pour ces modes d'emploi que j'ai pu mettre à profit ici
http://www.velo-cyclosport.com/agenda/carte_epreuves2010.html
et ici http://www.velo-cyclosport.com/annuaire/geolocalisation.php
Je cherche en complément à pouvoir modifier les info bulles :
- mettre un lien "zoom" dans l'info bulle, permettant lorsqu'on clique dessus de zoomer sur le lieu du marqueur
- mettre un lien "détail" , permettant lorsqu'on clique dessus d'afficher des informations détaillées, en remplacement de la croix dans le coin droit supérieur
- peut-on adapter et choisir la taille des info bulles ?
Merci par avance si vous avez des réponses
Frédéric
Je travaille en php, j'ai positionné sans problème les marqueurs sur une carte mais je ne sais pas éclater un marqueur en plusieurs lorsque les coordonnées sont exactement identiques (comme le fait automatiquement Google earth). Qui a la solution (même en javascript) ?
Merci
Bonjour.
Merci pour ce super tutorial.
J'essaie de faire un marqueur personnalisé avec une bulle d'information lorsque l'on clique dessus.
Séparément, le marqueur personnalisé est OK, le marqueur cliquable est lui aussi OK. Mais les 2 en même temps, cela ne fonctionne pas.
D'où ma question, est-ce possible ou est-ce mon code qui est faux ?
Bonjour,
Merci pour la très bonne doc qu'on peux trouver sur ton site.
J'essaye d'ailleurs d'adapter un de tes codes sur le texte étendue.
Je souhaiterais que dedans ça me liste les données d'une table mysql pour le client souhaité.
J'arrive à faire ma requête mais je ne vois pas comment passer ma variable $client qui me servira a filtrer. Cette variable est en javasvript.
Voilà mon code
@@
maxContent: '<p><br />' + '<?php $retour_com = mysql_query(" SELECT num FROM commande WHERE client='".$client."' ORDER BY date_commande"); while($donnees_com = mysql_fetch_array($retour_com)) { echo $donnees_com['num'].' '.$donnees_com['date_commande'].'<br>'; } ?>' +@@
Merci d'avance de votre aide !
Tuto génial!!!! et très utile....
Certes, il faut le digérer, mais après 3 ou 4 aspirines, ça passe tout seul
Un grand merci à toi Pascal pour cette réalisation
Vous découvrirez bientôt le résultat sur mon site communautaire de partage et d'échange d'étapes (POI) et de TRIP sur le thème de la quête avec un GPS (www.GpsAway.com)
Bravo pour tous ces exemples, bien organisés, progressifs, compréhensibles, je désespérais de trouver ça !
Petite demande d'aide tout de même :
Je génère une carte avec une dizaine de marqueurs qui sont susceptibles de se trouver à quelques centaines de mètres les uns des autres ou à plusieurs kilomètres, comment choisir un niveau de zoom pour être au plus près, mais avoir tous mes marqueurs visibles ? Y-a-t'il une méthode spécifique pour obtenir ça ?
Merci déjà et merci d'avance.
excellent "tuto", merci beaucoup pour cette doc
Respect pour le travail qui a été fourni, c'est pas facile de faire une documentation aussi claire et riche tout en restant très simple et clair
Thanks
thanx so much for the tutorial it's very easy and clear
Excuse Me for my french
j'ai un problem lord du creation de plusieur markers sur la carte le temps de chargement est tres tres lord
et j'ai une grande base de donneé =30800 enregistrement
est ce qu'il y a une méthode pour le mettre tres rapide ???
merci bien
mon soucis à moi c'est de créer _dynamiquement_ plusieurs cartes dans la même page, et ce pour plusieurs pages...
bonjour,
Comment résoudre le problème des marqueurs qui se supperposent (même coordonnées) ?
Et comment faire pour centrer la carte sur l'ensemble des points trouvés (MarkerManager) ?
Merci pour ce tuto, très util !
Est-il possible sur Google map, après avoir identifié plusieurs marqueurs, des les ralier à un point centrale entre eux pour optimiser le déplacement entre les marqueurs, et ce, par une application de Google map
Bonsoir, j'espère que cette article n'est pas placé dans les archives et j'aurais une petite réponse à ma question.
Je voudrais savoir comment placer plusieurs marqueurs en ayant les adresses et non les coordonnées.
Dans l'exemple il est indiqué que l'on doit faire une boucle sur un tableau, et appeler notre fonction createMarker.
Toujours dans l'exemple createMarker définit un point depuis des coordonnées. Je voudrais savoir comment procéder si je ne possède qu'une liste d'adresses ?
J'ai essayer d'utiliser le géocoder mais sans susscès voici ce que j'ai essayé :
@@
// Recherche des coordonnées d'un point dont on connait l'adresse :
var geocoder = new google.maps.ClientGeocoder();
geocoder.getLatLng(adresse, function (coord) {
map.setCenter(coord, 8); for (var i=0 ; i<aAdresse.length ; i++){ map.addOverlay(createMarker(aAdresse[i])); }});
var createMarker = function(adrresse)
{
var geocoderLieu = new google.maps.ClientGeocoder(); geocoderLieu.getLatLng(adrresse, function (point) { marker = new GMarker(point); });}; // createMarker
@@
Voila ce que j'ai testé, j'ai une erreur au niveau de la ligne var geocoderLieu = new google.maps.ClientGeocoder();
=> a is undefined dans main.js
Auriez vous une idées ?
Bonjour,
Je débute depuis cette semaine avec gmaps et j'ai "parcouru" un certains nombre de sites, de rubriques : Vraiment chapeau pour ton article, ton tuto !
Cela m'a permi de comprendre "rapidement" (et d'y revenir quand je bloquerai) beaucoups.
Bonne continuation et .... Merci
Maxence