article de presse - Cap Data Consulting
article de presse - Cap Data Consulting
article de presse - Cap Data Consulting
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
D ossier<br />
d'autre part, afin <strong>de</strong> placer <strong>de</strong>s repères et informations<br />
sur notre carte.<br />
En guise d'exemple, nous allons utiliser les services<br />
RPC <strong>de</strong> Geoco<strong>de</strong>r.us afin <strong>de</strong> localiser <strong>de</strong>s<br />
adresses aux Etats-Unis*. Nous allons appeler<br />
ce service distant, grâce à une fonction Ajax, qui<br />
nous permettra <strong>de</strong> réactualiser la carte sans<br />
avoir besoin <strong>de</strong> recharger la page.<br />
Cette fonction se présente comme suit :<br />
function update_map(address)<br />
{<br />
var request = null;<br />
if(window.XMLHttpRequest)<br />
request = new XMLHttpRequest();<br />
// Firefox<br />
else if(window.ActiveXObject)<br />
request = new ActiveXObject<br />
("Microsoft.XMLHTTP");<br />
// Internet Explorer<br />
else { alert("XMLHTTPRequest<br />
indisponible"); return; }<br />
Cette première partie sert uniquement à créer une<br />
instance <strong>de</strong> XMLHttpRequest, ou XMLHTTP selon<br />
le navigateur, afin <strong>de</strong> préparer notre requête AJAX.<br />
request.setRequestHea<strong>de</strong>r<br />
("Content-type",<br />
"application/x-www-form-urlenco<strong>de</strong>d");<br />
request.open("GET",<br />
"http://rpc.geoco<strong>de</strong>r.us/service/<br />
csv?address="+escape(address), true);<br />
request.send(null);<br />
Ce bloc prépare puis exécute la requête, dans<br />
laquelle nous avons spécifié l'adresse<br />
du service distant et indiqué<br />
l'adresse postale dont nous cherchons<br />
les coordonnées (cette adresse<br />
est saisie par l'utilisateur et<br />
transmise à la fonction <strong>de</strong> mise à<br />
jour <strong>de</strong> la carte dans le paramètre<br />
address).<br />
Afin <strong>de</strong> réagir dès que le service distant<br />
nous transmet une réponse<br />
favorable, on intercepte l'événement<br />
onReadyStateChange <strong>de</strong> notre<br />
objet XMLHttp :<br />
request.onreadystatechange<br />
= function() {<br />
if(request.readyState =<br />
= 4)<br />
{<br />
var coord =<br />
request.responseText.split(',')<br />
Maintenant que nous avons obtenu une réponse,<br />
sous forme d'une ligne <strong>de</strong> champs séparée<br />
par une virgule en cas <strong>de</strong> succès, <strong>de</strong> message<br />
d'erreur sinon, on intervient sur la page :<br />
// on teste la validité<br />
<strong>de</strong> la réponse<br />
if(coord.length > 1)<br />
{<br />
// l'adresse est bonne,<br />
on peut exploiter le retour<br />
// et on commence par effacer<br />
les marqueurs déjà sur la carte pour<br />
ne pas la surcharger<br />
map.clearOverlays()<br />
Les <strong>de</strong>ux premiers champs contiennent respectivement<br />
la longitu<strong>de</strong> et la latitu<strong>de</strong> <strong>de</strong> l'adresse recherchée.<br />
Nous nous en servons pour créer un objet<br />
Gpoint, qui permettra ensuite la création d'un marqueur,<br />
et le centrage <strong>de</strong> la carte sur ce point :<br />
var point = new GPoint<br />
(coord[1], coord[0])<br />
var marker = new GMarker(point)<br />
map.addOverlay(marker)<br />
map.centerAndZoom(point)<br />
}<br />
else<br />
{<br />
// l'adresse n'a pas été trouvée<br />
alert("L'adresse recherchée<br />
n'a pas été trouvée, veuillez vérifier<br />
Programmez n°85 33 avril 2006<br />
votre saisie.")<br />
return<br />
}<br />
}<br />
}<br />
}<br />
Avant <strong>de</strong> s'arrêter, nous allons voir une fonctionnalité<br />
supplémentaire, qui nous permettra<br />
<strong>de</strong> fournir à nos utilisateurs un peu plus d'informations<br />
sur les points marqués, et accessoirement,<br />
à comprendre le principe d'interception<br />
d'événements vu par l'API Google.<br />
Nous allons donc attacher à l'événement « click »<br />
<strong>de</strong> notre marqueur l'affichage d'une bulle d'information<br />
:<br />
GEvent.addListener(marker, 'click',<br />
function()<br />
{<br />
marker.openInfoWindowHtml<br />
("Longitu<strong>de</strong> : "+coord[1]+"Latitu<strong>de</strong> : "<br />
+ coord[0]);<br />
})<br />
Comme vous pouvez le constater, cette opération<br />
est plutôt simple, et d'un abord assez classique.<br />
Grâce à cette simple ligne <strong>de</strong> co<strong>de</strong>, il sera désormais<br />
possible <strong>de</strong> consulter les coordonnées <strong>de</strong><br />
l'adresse <strong>de</strong>mandée d'un simple clic sur le marqueur<br />
au centre <strong>de</strong> la carte.<br />
Conclusion<br />
Si aujourd'hui, la pertinence d'incorporer les services<br />
Gmap à votre site est toute relative (à moins<br />
bien sûr, que vous soyez un lecteur Québécois !),<br />
mieux vaut se préparer à maîtriser cet outil, qui<br />
risque <strong>de</strong> déferler en France dès que notre territoire<br />
sera couvert.<br />
En effet, il sera possible grâce à Gmaps, par<br />
exemple, <strong>de</strong> proposer directement à ses visiteurs<br />
d'établir un itinéraire pour se rendre dans vos<br />
locaux. Il sera sans doute possible également<br />
d'utiliser cette API pour <strong>de</strong>s fonctions avancées,<br />
comme <strong>de</strong>s estimations <strong>de</strong> temps <strong>de</strong> trajet pour<br />
<strong>de</strong>s livraisons, <strong>de</strong>s tournées, etc.<br />
*Voici quelques exemples d'adresses vali<strong>de</strong>s :<br />
1600 Pennsylvania Ave, Washington DC<br />
West 42nd & Broadway, New York NY<br />
1005 Gravenstein Highway North, Sebastopol CA<br />
601 Whitehead St, Key West, FL<br />
■ Gauthier Delamarre