Google Maps Javascript API (Partie 2)

Deuxième partie de l'article consacré à l'API Google Maps.
Nous allons voir dans cette partie :
Les fenêtres d’information.
Les marqueurs.
La création de contrôles
Pot pourri de fonctions et classes de l'API.
Vu 18180  fois

 

Dans cette seconde partie de l'article, j'estime que vous avez déjà lu et assimilé la 1ère partie de celui ci.

Ouvrir une fenêtre d’information

Il existe plusieurs types de fenêtres mis à notre disposition :

  • Les fenêtres d'informations "simples"

 

Nous utiliserons la méthode GMap2.openInfoWindowHtml() qui prend deux paramètres, le premier est un objet GLatLng qui sont les coordonnées pour centrer la fenêtre, le second est le code Html ou la chaîne de caractères qui apparaîtra comme contenu.

 

map.openInfoWindowHtml( new GLatLng(48.85861640881589, 2.3459243774414062), "<a href=´http://www.paris.fr´>Accédez au site de la Mairie</a>");

 

  • Les fenêtres d'informations avec onglets

Ici, la méthode GMap2.openInfoWindowTabHtml () qui prend deux paramètres, le premier est un objet GLatLng qui représente les coordonnées pour centrer la fenêtre, le second est un tableau de n GInfoWindowTab. Les objets GInfoWindowTab prennent deux paramètres, le premier est le label de l’onglet, le second est le code HTML ou le texte constituant le contenu.

//InfoWindowTabs
var onglets = new Array();
var ongletInfosMairie = new GInfoWindowTab ("Infos Mairie", "<table><tr><td>Téléphone : </td><td>0110101010</td></tr><tr><td colspan="2"><a href="http://www.paris.fr">Accédez au site de la Mairie de Paris</a></td></tr></table>");

var ongletRecherche = new GInfoWindowTab ("Recherche", "<table><tr><td>Mots à rechercher </td><td><input type="text" /></td></tr><tr><td colspan="2"><input type="submit" value="Rechercher"></td></tr></table>");

onglets[0] = ongletInfosMairie;
onglets[1] = ongletRecherche;

map.openInfoWindowTabsHtml(new GLatLng(48.85861640881589, 2.3459243774414062), onglets);

 

Pour compléter notre tour d’horizon des fenêtres d’informations, nous allons utiliser la classe GInfoWindowOptions. Les méthodes openInfoWindow(), openInfoWindowHtml(), openInfoWindowTabs, openInfoWindowTabsHtml prennent toutes un troisième paramètre optionnel sous forme d’un tableau d’objets GInfoWindowOptions.

Vous avez à votre disposition des options comme (voir plus d’options dans la documentation officielle) :

  • selectedTab : un nombre indiquant l’index de l’onglet sélectionné par défaut.
  • maxWidth : la largeur maximum de la fenêtre en pixels.
  • onOpenFn : le nom de la fonction à appeler à l’ouverture de la fenêtre.
  • onOpenFn : le nom de la fonction à appeler à l’ouverture de la fenêtre.

Prenons pour exemple ces deux fonctions :

function tracerEvenementOnOpenFn()
{
alert("onOpenFn");
}


function tracerEvenementOnCloseFn()
{
alert("onCloseFn");
}

Puis intégrons les options à notre code :

//InfoWindowTabs
var onglets = new Array();
var ongletInfosMairie = new GInfoWindowTab ("Infos Mairie", "<table><tr><td>Téléphone : </td><td>0110101010</td></tr><tr><td colspan="2"><a href="http://www.paris.fr">Accédez au site de la Mairie</a></td></tr></table>");

var ongletRecherche = new GInfoWindowTab ("Recherche", "<table><tr><td>Mots à rechercher </td><td><input type="text" /></td></tr><tr><td colspan="2"><input type="submit" value="Rechercher"></td></tr></table>");

onglets[0] = ongletInfosMairie;
onglets[1] = ongletRecherche;

//InfoWindowOptions
var options = {   maxWidth : 300,
selectedTab : 1,
onOpenFn : tracerEvenementOnOpenFn,onCloseFn : tracerEvenementOnCloseFn
};

map.openInfoWindowTabsHtml(new GLatLng(48.85861640881589, 2.3459243774414062), onglets, options);

L’onglet "Recherche" est sélectionné par défaut, la fenêtre d’information fait 300 pixels de largeur, une messageBox est affichée à l’ouverture de la fenêtre et une autre à la fermeture.

Les marqueurs

Pour créer un marqueur, il faut utiliser l’objet GMarker. Celui-ci prend comme paramètre un point (GLatLng), il prend aussi un tableau d’options optionnel comme second paramètre.

Exemple :

//Création du marqueur au centre de la carte. 
var point = map.getCenter();
var marqueur = new GMarker(point, {draggable: true});
   
// Ajoutons le marqueur à la carte.
map.addOverlay(marqueur);


 

 

Nous avons à notre disposition quelques options :

  • title : C’est en fait l’info bulle (ToolTip) qui s’affiche.
  • clickable : Booléen indiquant si le marqueur est cliquable, la valeur par défaut est true.
  • draggable : Booléen indiquant si le marqueur est déplaçable, la valeur par défaut est false.
  • bouncy : Booléen indiquant si le marqueur rebondit lorsqu’on arrête de le déplacer, la valeur par défaut est false.
  • bounceGravity : Entier indiquant la vitesse à laquelle marqueur rebondit, la valeur par défaut est 1.

Nous avons ensuite la possibilité de rendre notre marqueur déplaçable (drag and Drop) et de s’abonner à ses deux évènements qui sont dragstart et dragend:

 

//Création du marqueur au centre de la carte. 
var point = map.getCenter();
var marqueur = new GMarker(point, {draggable: true});   

// Abonnons les deux évènements
// en affichant un message lorsque ceux ci se déclenchent.
GEvent.addListener(marqueur, "dragstart", function() {
//Action(s)
}
);

GEvent.addListener(marqueur, "dragend", function() {
//Action(s)
}
);

// Ajoutons le marqueur à la carte.
map.addOverlay(marqueur);

Enfin, nous pouvons afficher une fenêtre d’information lors du click sur le marqueur.

 

GEvent.addListener(marqueur, "click", function() 
{
marqueur.openInfoWindowHtml("<b>Marqueur</b><br><InfoWindowHtml>");
}
);

La personnalisation et création de contrôles

Nous allons voir comment procéder pour personnaliser les marqueurs avec un icône de notre choix. Pour l’exemple, nous utiliserons les icônes mis à disposition par Google. Pour créer le marqueur personnalisé, il suffit de lui passer un objet GIcon comme second paramètre. La classe GIcon possède des propriétés liées à :

  • l’apparence et les coordonnées de l’icône (image, iconSize, iconAnchor, infoWindowAnchor)
  • l’apparence et les coordonnées de l’ombre de l’icône (shadow, shadowSize)

//Création d´un icone personnalisé.
var icone = new GIcon();
icone.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
icone.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
icone.iconSize = new GSize(12, 20);
icone.shadowSize = new GSize(22, 20);
icone.iconAnchor = new GPoint(6, 20);
icone.infoWindowAnchor = new GPoint(5, 1);

//Création du marqueur au centre de la carte.
var point = map.getCenter();
var marqueur = new GMarker(point, icone);   
map.addOverlay(marqueur);

Nous pouvons aussi créer notre propre contrôle à l’aide de la classe GControl.

 

//Contrôle personnalisé.
function TextualZoomControl(){}

//Création du contrôle.
TextualZoomControl.prototype = new GControl();
//Fonction d´initialisation.
TextualZoomControl.prototype.initialize =
function(map)
{
//Création du container
var container = document.createElement("div");

//Création de la zone de zoom +
var zoomInDiv = document.createElement("div");
zoomInDiv.appendChild(document.createTextNode("Zoom +"));

//On applique le style
this.setButtonStyle_(zoomInDiv);

//On ajoute la zone au container
container.appendChild(zoomInDiv);

//On abonne le click sur la zone.
   GEvent.addDomListener(zoomInDiv, "click", function(){map.zoomIn();});

//Création de la zone de zoom -
var zoomOutDiv = document.createElement("div");
zoomOutDiv.appendChild(document.createTextNode("Zoom -"));

//On applique le style
this.setButtonStyle_(zoomOutDiv);

//On ajoute la zone au container
container.appendChild(zoomOutDiv);

//On abonne le click sur la zone.
GEvent.addDomListener(zoomOutDiv, "click", function(){map.zoomOut();});

//Ajout du container au container de la carte.
map.getContainer().appendChild(container);

//On retourne le container pour que l´API puisse l´initialiser proprement.
return container;
}
// Fonction permettant de récupérer la position par défaut du contrôle.
TextualZoomControl.prototype.getDefaultPosition =
function()
{
return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
}
//Fonction qui applique le style voulu au contrôle passé en paramètre.
TextualZoomControl.prototype.setButtonStyle_ = function(controle)
{
controle.style.textDecoration = "underline";
controle.style.color = "#0000cc";
controle.style.backgroundColor = "white";
controle.style.font = "small Arial";
controle.style.border = "1px solid black";
controle.style.padding = "2px";
controle.style.marginBottom = "3px";
controle.style.textAlign = "center";
controle.style.width = "6em";
controle.style.cursor = "pointer";
}

Voilà, nous avons créé un contrôle personnalisé. Il ne reste plus qu’à l’utiliser comme n’importe quel contrôle :

 

map.addControl(new TextualZoomControl());

 

Bien évidement, les contrôles que vous créez peuvent permettre n’importe quelle action, il ne s’agit pas uniquement de remplacer les contrôles existants.

Pot pourri de fonctions et classes de l'API

Voici quelques fonctions de la classe GMap

// Déplace la carte vers le point.
map.panTo(new GLatLng(37.4569, -122.1569));

// Autorise le glisser déplacer sur la carte (option par défaut)
map.enableDragging() ;

// Interdit le glisser déplacer sur la carte
map.disableDragging() ;

// Autorise les fenêtres d’information (option par défaut)
map.enableInfoWindow() ;

// Interdit les fenêtres d’information
map.disableInfoWindow() ;

// Autorise le double click permettant de zoomer
map.enableDoubleClickZoom() ;

// Interdit le double click permettant de zoomer (option par défaut)
map.disableDoubleClickZoom() ;

 

Le Logger permet d’afficher dans une fenêtre (div), fort bien faîte, située en bas de la page les informations que vous désirez afficher. Elle s’avère très pratique pour débugger.

 

// Texte simple
GLog.write("Salut");

// Lien
GLog.writeUrl("http://www.google.com");

// HTML
GLog.writeHtml("<input type="text">");

Conclusion

Notre tour d’horizon de l’API Google Maps est terminé, je vous conseille pour une utilisation avancée de vous référer à la documentation officielle. De plus, certaines fonctions peuvent devenir obsolète si Google met à disposition de nouvelles versions de son API.


 

Publié le  29/10/2006
Auteur:  SYL#

 

Commentaires

Posté le : 23/12/2006 Par : sousou

Bonjour, savez vous comment recuperer la position courante du curseur lors d'un clic ou celle du marker lorsque celui ci est deplaçable (draggable: true ).

Optenir le centre de la carte est facile (var point = map.getCenter();)
mais recuperer la position du curseur ou du marker?

Posté le : 23/12/2006 Par : SYL#

Salut, pour récupérer la position du clikc, c'est très simple.
Il suffit de s'abonner à l'évènement click, la signature de la fonction attends un marker ( à null si le clikc n'est pas sur un marker) et un point. On accède ensuite aux propriétés x et y du point.

Exemple :

GEvent.addListener(map, "click", function(marker, point)
{
//point.x;
//point.y;
}
);

Posté le : 14/03/2007 Par : olifa07

Bonjour,
bravo pour ce tuto... excellent et très bien documenté.
Cependant j'aimerais inclure dans ma page 3 marqueurs avec des coordonnées géographiques précises et non pas alignés au centre d'une map comme sur l'exemple.
J'ai du mal à trouver la syntaxe du code à inclure.
Merci d'avance pour votre aide.
Olifa07

Posté le : 14/03/2007 Par : SYL#

Salut olifa,
Dans l'exemple, le point passé en paramètre au constructeur de la classe GMarker est récupéré avec la méthode GetCenter qui renvoit un GPoint.

Tu as juste à remplacer le point par une instance de GPOint de ton choix, regarde la classe GPoint :

http://www.google.com/apis/maps/documentation/reference.html#GPoint

Voilà

Si vous souhaitez ajouter un commentaire vous devez être authentifié.

 

ASP-PHP.NET  C²I  ClubVSTS  CodePPC  CodeS-SourceS  Dotnet-News.com  Tech Head Brothers 

Dotnet-Project.com© tous droits réservés
Webmaster Aleks. Ont collaboré à l'aboutissement de ce projet :
CodeS-SourceS.com, ASP-PHP.Net, DotNet-FR.org, C2i.fr, Newsletter ASP.NET.