voici pour vous une petite introduction à l'API JSR 179 aussi connue sous le nom Java Location API (API de localisation Java).
Introduction à l'API
La spécification Java JSR 179 concerne l'API de localisation (comme dit plus haut) éditée par Sun pour la Java Micro Edition (JavaME). Cette API vise les téléphones portables ou plutôt n'importe quels appareils mobiles tels que les PDAs qui intègrent la plateforme Java.Cette spécification a été créée et est maintenue par Nokia. Pour plus d'informations, je vous conseil d'aller voir le forum Nokia (bien entendu, comme je suis gentil, vous pouvez trouver les liens utiles à la fin de l'article).
Introduction à la localisation
Coordonnées:
L'idée majeure qui se cache derrière le processus de localisation est d'obtenir les coordonnées de l'appareil mobile et la plus part du temps, d'afficher le résultat sur une carte, montrant ainsi l'emplacement où se trouve l'appareil. Le système de coordonnées utilisé n'est pas très compliqué, il marche par degrés Nord/Sud et Est/Ouest.Par exemple, les coordonnées de Baltimore sont 39.28° Nord (latitude) et 76.60° Ouest (longitude) qui se représente par le couple de valeurs (39.28, -76.60). Vous pouvez remarquer le signe moins, juste avant la valeur de la longitude. C'est tout simplement du au fait que l'Ouest est le côté négatif du système de coordonnées pour la longitude, tout comme le Sud l'est pour la latitude. Si vous voulez tester quelques couples de valeurs, vous pouvez tout simplement aller sur Google Maps et jouer avec les valeurs que je vous ai données pour Baltimore.
Moyens de localisation:
Il existe 2 principaux moyens de localiser un appareil mobile:- GPS
- GSM/UMTS
GPS
Le GPS (Global Positioning System) ne sera pas évoqué en détails ici puisque je présume que tout monde sait comment ça marche. Si ce n'est pas le cas, c'est pas compliqué de trouver une petite introduction sur le net, plein de sites en parlent sinon, il y a toujours Wikipedia.Ce qui est intéressant à savoir vis à vis du GPS dans l'optique de cet article est que c'est la façon la plus facile, la moins chère et donc la plus répandue pour localiser un appareil mobile. À l'heure d'aujourd'hui, la plus part des portables haut de gammes incluent une puce GPS. Si ce n'est pas le cas, il est possible d'en avoir un en Bluetooth. De plus, cela n'inclut aucuns frais supplémentaires pour le client comme pour le fournisseur d'accès, ce qui veut dire : pas besoin d'avoir un service particulier pour les clients qui veulent localiser leurs appareils.
GSM/UMTS
Pour tous les téléphones qui n'ont pas de puce GPS, il existe d'autres façons de se repérer. Pour ce faire, il faut utiliser l'infrastructure du réseau GSM, ce qui signifie que le fournisseur d'accès doit fournir le dit service pour ses clients, i.e. ça ne sera pas gratuit.Il y a plusieurs façons de faire et seules les plus connues sont listées ci-dessous:
- COO (Cell of Origin), appelée aussi Cell-ID, est la plus facile et économique des façons de faire. Cependant, c'est loin d'être très précis, tout particulièrement dans les zones rurales (précision allant jusqu'à 30km) contre une précision de quelques centaines de mètres en ville. Cette méthode consiste à trouver l'antenne GSM la plus proche. Une fois que c'est fait, la position géographique du téléphone sera assimilée à celle de la station. Une version améliorée existe dans laquelle la zone d'émission de la station est divisée en segments, le téléphone se trouvant dans l'un d'entre eux, cela augmente la précision.
- TOA (Time of Arrival) est une méthode un peu plus compliquée. Cette méthode consiste à calculer le temps nécessaire à un signal émis par le téléphone pour arriver jusqu'à la station. Ainsi la distance est connue, i.e. la zone où se trouve le téléphone aussi. Bien entendu, plus il y a de stations GSM, meilleure est la précision. Un nombre de 3 stations est bien entendu idéal.
- RSSI (Received Signal Strength Indicator) est une méthode un peu similaire à la précédente. Cette fois-ci, le téléphone émet un signal qui sera capté par une station et la force du signal reçu permettra de déterminer la distance entre le téléphone et la base. Encore une fois, plus il y a de base, mieux c'est.
Dans la suite de l'article, seuls les appareils équipés d'un GPS (interne ou externe) vont être évoqués. Cela signifie que seul la localisation par GPS sera décrite puisque l'API ne donne aucunes méthodes pour la localisation utilisant le réseau GSM.
Utiliser l'API – Petit exemple
La meilleure façon de comprendre comment ça marche est de donner un exemple (désolé, les commentaires sont en anglais, je préfère les laisser ainsi) :import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.location.Coordinates; import javax.microedition.location.Criteria; import javax.microedition.location.Location; import javax.microedition.location.LocationException; import javax.microedition.location.LocationProvider; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class EasyLocation extends MIDlet { /** * ----------- * Attributes: * ----------- */ private static Display display = null; private LocationProvider lp = null; private Location location = null; private Criteria criteria = null; /** * -------------------- * Getters and Setters: * -------------------- */ public static Display getDisplay() { return display; } /** * ------------------------ * MIDlet specific methods: * ------------------------ */ protected void startApp() throws MIDletStateChangeException { // Getting the instance of the display display = Display.getDisplay(this); // Instantiation of the interesting attributes lp = null; location = null; criteria = new Criteria(); criteria.setHorizontalAccuracy(500); // Getting the instance of the provider i.e. the GPS. try { // If there is a built in chip on your phone, it will just ask for permission. // If not, it will look for a Bluetooth device. lp = LocationProvider.getInstance(criteria); } catch (LocationException e) { // ... } // Timeout for the connection try { location = lp.getLocation(20); } catch (LocationException e) { // ... } catch (InterruptedException e) { // ... } // Getting the coordinates String res = "Coordinates:\n"; try { Coordinates coordinates = location.getQualifiedCoordinates(); res += "Altitude: " + coordinates.getAltitude() + "\n"; res += "Latitude: " + coordinates.getLatitude() + "\n"; res += "Longitude: " + coordinates.getLongitude() + "\n"; } catch (Exception e) { // ... } // Displaying the result Form form = new Form("Results"); form.append(res); display.setCurrent(form); } protected void pauseApp() {} protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {} }Le code donné est le plus court code requis pour obtenir la localisation d'un téléphone portable.
Maintenant que vous avez une idée de quelle tête la bête a, c'est pas très compliqué de comprendre comment ça marche. En effet, l'idée principale est de créer une instance du module GPS. Une fois fait, on a juste besoin de demander les coordonnées et de les afficher. Simple hein?
Et bien voilà, je pense que c'est suffisant pour aujourd'hui. Ce que vous avez appris jusqu'à présent c'est qu'obtenir les coordonnées géographiques en utilisant JavaME n'est vraiment pas compliqué. Vous pouvez tous le faire ! J'espère vous avez aussi apprécié les petites introductions que je vous ai donnés sur l'API et les méthodes de localisation. Amusez-vous bien !
Étant un néophyte total sur ce sujet j'ai essayé de faire les manipulations mais après une petite heure j'ai décidé de chercher directement une appli de localisation portable car j'ai pas réussi à m'en dépatouiller. Vous avez créer un appli déjà prête histoire de voir le résultat?
RépondreSupprimer