L'implémentation de la future API de géolocalisation du W3C est en train d'arriver dans Firefox. La cible principale est Fennec, la future version de Firefox pour périphériques "portables", mais elle devrait être également disponible dans Firefox 3.1 (on peut déjà jouer avec dans les compilations nocturnes). Pour permettre aux internautes de commencer à se l'approprier et à inventer de nouveaux usages, les développeurs des Laboratoires Mozilla en ont porté une version sous la forme d'une extension, Geode, que l'on peut dès à présent installer dans Firefox 3.

Comment ça marche

L'Api permet à un script s'exécutant dans une page web de connaître la position du navigateur, via l'appel à une méthode du navigateur. Celui-ci détermine sa position en faisant appel à des services: GPS, Wifi, etc et, avec l'accord de l'utilisateur, communique sa position au script, qui peut lui-même la transmettre au serveur d'origine via une requête asynchrone.

Pour l'heure Geode ne permet de déterminer la position du navigateur qu'en faisant appel à un seul service, fournis par la société SkyHook Wireless, et basé sur la localisation des bornes wifi les plus proches.

L'API

L'APi de géolocalisation du W3C est encore à l'état de brouillon. Elle fournit une interface de haut niveau permettant de communiquer la position du navigateur, indépendamment de la technologie utilisée pour déterminer celle-ci.

La position du navigateur est retournée sous la forme d'un objet comportant les attributs suivants:

  • latitude : comme son nom l'indique, en degrés;
  • longitude : idem;
  • altitude : l'altitude en mètres au dessus du niveau de la mer;
  • accuracy : la précision en mètres de la latitude et de la longitude;
  • altitudeAccuracy : idem pour l'altitude;
  • heading : la direction dans laquelle l'objet est tourné, en degrés par rapport au nord (donc 90 si vous êtes tournés vers le lever du soleil et que j'ai bien compris)
  • velocity : la vitesse de déplacement en mètres par secondes;
  • timestamp : l'heure exacte de la mesure sous la forme d'un timestamp;

Ces données sont manipulées via l'interface ClientInformationGeolocation ajouté à window.navigator. Celle-ci retourne un objet implémentant Geolocation, qui possède les propriétés et méthodes suivantes:

  • lastPosition : la dernière position connue de l'objet;
  • getCurrentPosition() : retourne immédiatement la dernière position connue de l'objet, puis met à jour la position (une opération qui peut prendre du temps). Elle accepte trois paramètres: le premier est une fonction de callback qui sera appelée en cas de réussite de la mise à jour de la position, la nouvelle position lui étant passée; le deuxième est une fonction de callback appelée en cas d'erreur. Enfin le dernier contient des options;
  • watchPosition() : retourne immédiatement la dernière position connue de l'objet, puis la met à jour et la surveille, c'est à dire que la fonction passée en premier argument sera appelée à chaque fois que la position de l'objet change;
  • clearWatch() permet d'arrêter le suivi de la position démarrée par le précédent appel;

Un exemple sera sans doute plus clair:

  • pour juste connaître la position actuelle du navigateur:
navigator.geolocation.getCurrentPosition(function(pos) {
  alert( pos.latitude + ", " + pos.longitude );
})
  • pour afficher une alerte à chaque fois que la position change:
navigator.geolocation.watchPosition(function(pos) {
  alert( pos.latitude + ", " + pos.longitude );
})

Enfin, les fonctions getCurrentPosition() et watchPosition() acceptent une option sous la forme d'un objet PositionOptions:

  • enableHiqhAccuracy : booléen indiquant si on veut une réponse précise ou non;
  • timeout : la durée (en millisecondes) avant d'estimer que la recherche de la position est infructueuse;

Le service

Pour vous localiser, Geode fait appel à Loki, une technologie développée par SkyHook Wireless qui permet de géo-localiser un objet disposant d'une connexion wifi à partir des adresses MAC des bornes les plus proches. Dans les régions urbaines bien couvertes, la localisation se fait à 20 ou 30 mètres près. C'est ce service qui est déjà utilisé par exemple par les iPhones non munis de GPS. Il est censé être beaucoup plus rapide que le GPS. Reste à savoir quelle est sa fiabilité hors de l'Amérique du nord.

Pour quels usages ?

Les usages sont bien entendus à inventer, et c'est une des raisons d'être de Geode. L'annonce en suggère certains: des classiques, comme trouver des services à proximité de l'endroit où vous vous trouvez, et d'autres plus originaux. Par exemple, votre navigateur pourrait déterminer si vous êtes chez vous ou à votre bureau, et modifier son comportement en fonction (changer le thème, planquer certains marques pages etc). On peux aussi imaginer un renforcement de la sécurité en n'autorisant la connection à une application en ligne que si l'utilisateur est physiquement dans les locaux de l'entreprise (l'Api permet en théorie une géo-localisation précise, y compris en terme d'altitude, pour peu qu'on fasse appel à un service offrant une assez grande précision)

Et ma vie privée dans tout ça ???

C'est évidemment la première question que je me suis posée. Geode implémente une interface utilisateur qui, à chaque fois qu'un script dans une page veut interroger le navigateur pour savoir où vous êtes, vous avertit et vous permet de choisir si vous acceptez de répondre, et avec quelle précision. Si vous acceptez de répondre, Geode va faire appel à SkyHook pour vous localiser. Il ne vous reste plus qu'à faire confiance à la politique en matière de respect de la vie privé de celui-ci. A terme (normalement à partir de FF 3.1), l'utilisateur pourra choisir les services que son navigateur peut utiliser pour déterminer sa position.

Etant un grand sédentaire paranoïaque, je ne pense pas que cette extension va révolutionner mon usage du Net. Mais pour tous les internautes qui ne partagent pas avec moi ces deux détails, je pense que Geode est un grand pas de plus vers l'apparition de services que dans quelques mois vos petits enfants imagineront même pas que vous ayez pu vivre dans un monde sans. Décidément, Firefox, ça déchire !