02.07.2013 Views

article de presse - Cap Data Consulting

article de presse - Cap Data Consulting

article de presse - Cap Data Consulting

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!