39
Case Study Mobile Clients for Location-Based Services

Case Study Mobile Clients for Location- Based Services

Embed Size (px)

Citation preview

Page 1: Case Study Mobile Clients for Location- Based Services

Case Study

Mobile Clients for Location-Based Services

Page 2: Case Study Mobile Clients for Location- Based Services

Plan

Page 3: Case Study Mobile Clients for Location- Based Services

Location-based services Pull-based

L’usager envoie sa position pour obtenir de l’information

Push-based Le fournisseur de service détecte l’usager à proximité et lui transmet

de l’information

GIS : geographic information systems Déterminer une adresse à partir de la position de l’usager Recherche dans les pages jaunes Calcul de trajets Cartes sur mesure

Coûteux et complexe à opérer Maintenir le système Coûts des licences Aggrégation et mise-à-jour des données géographiques Administration des serveurs

Bon candidat pour transformation en service web

Page 4: Case Study Mobile Clients for Location- Based Services

Service Web MapPoint

Services généraux GetCountryRegionInfo, GetDataSourceInfo…

Services de recherche Géocodage et géocodage inverse Points d’intérêts

Services de calcul de parcours Trajets, descriptions d’itinéraires, cartes...

Services de rendus Mise en évidence des routes, icônes, zoom...

Page 5: Case Study Mobile Clients for Location- Based Services

Architecture de base

Pour trouver un trajet, il faut faire plusieurs requêtes Coûteux et long Introduire une façade

Page 6: Case Study Mobile Clients for Location- Based Services

Développement

Générer les classe stubs Java pour l’API SOAP de MapPoint

À partir de ces classes développer un client de plus haut niveau

Transformer le client en service web Générer son fichier WSDL (.wsdd)

Page 7: Case Study Mobile Clients for Location- Based Services

public class MPClient { // Authentication credentials obtained from MapPoint Website. private static String userName = "yourID"; private static String password = "yourPass";

// Other variables. // The cached route segments. private Segment[] segments;

/* Get the driving directions between two human-ready addresses. This method also caches the route in the segments array. You have to run this method before you can retrieve maps for the entire

route or for each route segment. */

public String [] getDirections ( String fromStreet, String fromCity, String fromState, String fromZip, String toStreet, String toCity, String toState, String toZip )

throws Exception { // Method body.

}

/* Return the number of segments of the current cached route. The number is available after you call the getDirections() method.

*/public int getSegmentNum () throws Exception {

// Method body. }

/* Get a map from the current cached route. The return value is a byte array for the GIF image. index == 0 for the overview map

index <= segmentNum for a segment map */public byte [] getMap (int index, int width, int height) throws Exception {

// Method body. }

}

Page 8: Case Study Mobile Clients for Location- Based Services

Un client CDC

Page 9: Case Study Mobile Clients for Location- Based Services

import org.ksoap.*;import org.ksoap.transport.*;import org.ksoap.marshal.*;

public class AWTMap extends Frame implements WindowListener, ActionListener { private String endPointURL; // variables contenant les composants de l’interface private ScrollPane scroll; ETC.

private ClassMap cm; private Marshal md; public AWTMap (int width, int height) { super("MapPoint Java demo"); try {

cm = new ClassMap (); md = new MarshalBase64 (); md.register (cm);

endPointURL = "http://128.83.129.226:8080/axis/services/MapPoint"; go.addActionListener(this); // construction de l’interface go = new Button("Go"); ETC. startScreen(); } catch (Exception e) { e.printStackTrace(); } }

Page 10: Case Study Mobile Clients for Location- Based Services

private void listScreen (boolean newSearch) { try { if (newSearch) { SoapObject method = new SoapObject("", "getDirections"); // Use the SE version for standard JDK // Http methods HttpTransportSE rpc = new HttpTransportSE(endPointURL, "\"\""); rpc.setClassMap(cm); method.addProperty("in0", fromStreet.getText()); method.addProperty("in1", fromCity.getText()); method.addProperty("in2", fromState.getText()); method.addProperty("in3", fromZip.getText()); method.addProperty("in4", toStreet.getText()); method.addProperty("in5", toCity.getText()); method.addProperty("in6", toState.getText()); method.addProperty("in7", toZip.getText()); Vector v = (Vector) rpc.call (method);

directionsList = new java.awt.List(10, false); directionsList.add("Overview Map"); for (int i = 0; i < v.size(); i++) { directionsList.add((String) v.elementAt(i)); } directionsList.setSize(200, 200); }//...

Page 11: Case Study Mobile Clients for Location- Based Services

private void listScreen (boolean newSearch) { try { //... Panel top = new Panel (); top.setLayout(new FlowLayout(FlowLayout.LEFT)); top.add(directionsList); Panel bottom = new Panel (); bottom.setLayout(new FlowLayout(FlowLayout.LEFT)); bottom.add(startOver); bottom.add(showMap); scroll.remove(content); content = new Panel (); content.setLayout(new BorderLayout()); content.add(top, BorderLayout.CENTER); // content.add(mid, BorderLayout.CENTER); content.add(bottom, BorderLayout.SOUTH); scroll.add(content); setVisible(true); } catch (Exception e) { e.printStackTrace(); } }

Page 12: Case Study Mobile Clients for Location- Based Services

private void mapScreen (int i) { try { ImageItem img; byte [] imgarray;

SoapObject method = new SoapObject("", "getMap"); HttpTransportSE rpc = new HttpTransportSE(endPointURL, "\"\""); rpc.setClassMap(cm);

method.addProperty("in0", new Integer(i)); method.addProperty("in1", new Integer(200)); method.addProperty("in2", new Integer(200)); imgarray = (byte []) rpc.call (method); img = new ImageItem(imgarray, 200, 200); Panel top = new Panel (); top.add(img); Panel bottom = new Panel (); bottom.add(startOver); bottom.add(showDirections); scroll.remove(content); content = new Panel (); content.setLayout(new BorderLayout()); content.add(top, BorderLayout.CENTER); content.add(bottom, BorderLayout.SOUTH); scroll.add(content); setVisible(true); } catch (Exception e) { e.printStackTrace(); } }

Page 13: Case Study Mobile Clients for Location- Based Services

Un client MIDP

Page 14: Case Study Mobile Clients for Location- Based Services

public class MIDPDirections extends MIDlet implements CommandListener { Display display; Command fromNext, toNext, cancel, done, exit; TextField fromStreet, fromCity, fromState, fromZip; TextField toStreet, toCity, toState, toZip; String endPointURL;

public MIDPDirections () { endPointURL = "http://128.83.129.226:8080/axis/services/MapPoint"; display = Display.getDisplay(this); fromNext = new Command("NEXT", Command.SCREEN, 2); toNext = new Command("NEXT", Command.SCREEN, 2); cancel = new Command("CANCEL", Command.SCREEN, 2); done = new Command("DONE", Command.SCREEN, 2); exit = new Command("EXIT", Command.SCREEN, 2); fromStreet = new TextField("Street", "", 20, TextField.ANY); fromCity = new TextField("City", "", 20, TextField.ANY); fromState = new TextField("State", "", 10, TextField.ANY); fromZip = new TextField("Zip", "", 10, TextField.NUMERIC); toStreet = new TextField("Street", "", 20, TextField.ANY); toCity = new TextField("City", "", 20, TextField.ANY); toState = new TextField("State", "", 10, TextField.ANY); toZip = new TextField("Zip", "", 10, TextField.NUMERIC); } public void startApp() { fromScreen (); } public void pauseApp() { // Do nothing } public void destroyApp(boolean unconditional) { // Do nothing }

Page 15: Case Study Mobile Clients for Location- Based Services

public void commandAction(Command command, Displayable screen) {

if (command == exit) { destroyApp(false); notifyDestroyed(); } else if ( command == done || command == cancel ) { startApp (); } else if ( command == fromNext ) { toScreen (); } else if ( command == toNext ) { directionScreen (); } } public void fromScreen () { Form form = new Form ("From"); form.append(fromStreet); form.append(fromCity); form.append(fromState); form.append(fromZip); form.addCommand(fromNext); form.addCommand(cancel); form.setCommandListener( (CommandListener) this); display.setCurrent(form); } public void toScreen () { Form form = new Form ("To"); form.append(toStreet); form.append(toCity); form.append(toState); form.append(toZip); form.addCommand(toNext); form.addCommand(cancel); form.setCommandListener( (CommandListener) this); display.setCurrent(form); }

Page 16: Case Study Mobile Clients for Location- Based Services

public void directionScreen () { Vector v = getDirections (); Form form = new Form ("Directions"); for (int i = 0; i < v.size(); i++) { form.append((String) v.elementAt(i) + "\n"); } form.addCommand(done); form.addCommand(exit); form.setCommandListener( (CommandListener) this); display.setCurrent(form); } private Vector getDirections () { Vector v = null; try { SoapObject method = new SoapObject("", "getDirections"); method.addProperty("in0", fromStreet.getString()); method.addProperty("in1", fromCity.getString()); method.addProperty("in2", fromState.getString()); method.addProperty("in3", fromZip.getString()); method.addProperty("in4", toStreet.getString()); method.addProperty("in5", toCity.getString()); method.addProperty("in6", toState.getString()); method.addProperty("in7", toZip.getString()); HttpTransport rpc = new HttpTransport(endPointURL, "\"\""); v = (Vector) rpc.call (method); } catch (Exception e) { e.printStackTrace(); } return v; }}

Page 17: Case Study Mobile Clients for Location- Based Services

Location-based services

3 questions Où suis-je ? Qu’est-ce qu’il y a autour de moi ? Comment puis-je me rendre à un lieu donné ?

Fonctionnement Déterminer la position de l’usager

Soit faire le calcul de la position au niveau du serveur et envoyer les données à l’appareil

Soit obtenir des données de localisation directement à partir de l’appareil de l’usager

Utiliser la position et des informations complémentaires pour fournir des services personnalisés

Standard Open Location Services (OpenLS), un standard fondé sur XML pour

faire des requêtes à un GIS

Page 18: Case Study Mobile Clients for Location- Based Services

Localisation WiFI

WLAN-based Real-time Asset Tracking System in Healthcare Environments Jong-Hoon Youn, Hesham Ali, Hamid Sharif, Jitender Deogun, Jason Uher, Steve Hinrichs Wimob 2007

Page 19: Case Study Mobile Clients for Location- Based Services

GPS et D(ifferential) GPS

Page 20: Case Study Mobile Clients for Location- Based Services

Assisted GPS

Pour améliorer la performance

Les GPS conventionnels ont de la difficulté à donner des positions fiables lorsque les conditions de réception des signaux sont mauvaises (canyons urbains, signaux affaiblis par les arbres, à l’intérieur des édifices…

Incapacité à télécharger l’almanach et les éphémérides à partir des satellites GPS, incapables de fonctionner si un signal clair n’est pas reçu pendant au moins 1 minutes

Un récepteur A-GPS peut résoudre ces problèmes à l’aide d’un serveur d’assistance

Le serveur d’assistance peut localiser le téléphone grâce à la cellule à laquelle il est connecté.

Le serveur d’assistance possède un signal satellite de qualité et de la puissance de calcul, de sorte qu’il peut comparer les signaux fragmentaires reçus par le téléphone cellulaire avec le signal qu’il reçoit et informer le téléphone cellulaire de sa position

Le serveur d’assistance peut fournir au téléphone cellulaire les données orbitales des satellites GPS, permettant au téléphone cellulaire de se synchroniser avec les satellites quand il ne le pourrait pas et ainsi de calculer de manière autonome sa position

Le serveur d’assistance possède une meilleure connaissance des conditions pouvant affecter le signal GPS (e.g. l’ionosphère ) permettant des calculs de position plus précis

Page 21: Case Study Mobile Clients for Location- Based Services

Améliorer les instructions

Déterminer la position de l’usager À partir du terminal

GPS GPS-lookup lent

À partir du réseau Opérateurs cellulaires

• Position des antennes• Triangulation

GPS assisté 1- utiliser le réseau pour une première approximation 2- GPS pour affiner la position

Réseau sans fil locaux WIFI, BlueTooth, UWB

Usager Simplement lui demander d’indiquer le point de repère le plus

proche

Page 22: Case Study Mobile Clients for Location- Based Services
Page 23: Case Study Mobile Clients for Location- Based Services

Criteria criteria = new Criteria ();Criteria.setPreferredResponseTime(20);Criteria.setVerticalAccuracy(10);

//set another criteria

LocationProvider provider = LocationProvider.getInstance (criteria);

// the StepTracker’s locationUpdated() method will be called// every 1 second until the 100th second.// the past location data can not be more than 2 second old.

StepTracker tracker = new StepTracker();Provider.setLocationListener(tracker, 1, 100, 2);

//add the collision handling logic. The CollisionHandler’s//proximityEvent() method is called whenthe device enters the 0.5 //meter radius of either coord1 or coord2.

Coordinates coord1 = new Coordinates(lat1, long1, alt1) ;Coordinates coord2 = new Coordinates(lat2, long2, alt2);CollisionHandler collision = new CollisionHandler ();provider.addProximityListener(collision, coord1, 0.5);provider.addProximityListener(collision, coord2, 0.5);

Page 24: Case Study Mobile Clients for Location- Based Services

public StepTracker implements LocationListener{

public StepTracker() { }

// both thread below must return immediately// so put long processes in a separate thread

public void locationUpdated (LocationProvider provider, Location location )

{// do something with the new location// for example update the steps on the map

}

public void providerStateChanged ( LocationProvider provider, int newState)

{//handle the state change// for example if the provider becomes unavailable,

// alert the user.}

}

La classe StepTracker

Page 25: Case Study Mobile Clients for Location- Based Services

La classe CollisionHandler

public CollisionHandler implements ProximityListener{

public CollisionHandler () {}

public void proximityEvent(Coordinates coordinates, Location location )

{//handle the collision here. For example alert the user and//provide a direction to move away from the collision point.

}

public void monitoringStateChanged (Boolean isActive){

//handle the state change in the provider}

}

Page 26: Case Study Mobile Clients for Location- Based Services

Bonnes pratiques Gérer gracieusement la non-disponibilité du service

La position de l’usager peut ne pas être disponible L’appareil ne peut pas fournir la position du l’usager à cause de la méthode de localisation utilisée

• Dans un canyon GPS, dans un tunnel, dans un avion…. L’usager n’a pas permis que l’on transmette l’information de localisation Aucun fournisseur de service de localisation n’est disponible actuellement.

En fonction de la méthode utilisée, la détermination de la position peut prendre un temps prolongé

Le délai peut être tellement long que à la fin, le résultat n’est plus pertinent Application de navigation

Garder l’usager informé

Les coûts associés à certains services de localisation peuvent grimper rapidement Exemple: les méthode de localisation à l’aide des réseaux cellulaires Ne pas surutiliser les services tarifés

Tenir compte des impératifs liés à la protection de la vie privée Informer les clients au sujet de

données de localisation recueillies sur eux L’utilisation de ces données de localisation

Offrir aux client la possibilité de choisir quelles données de localisation seront révélées Ofrir aux clients l’option de ne pas participer à un service Permettre aux clients de visualiser et réviser les permissions accordées dans leur profil de telle sorte qu’ils

sachent ce qui est permis

Protéger les informations de localisation de telle sorte qu’elles ne puissent pas être accédées par des personnes non-autorisées.

Page 27: Case Study Mobile Clients for Location- Based Services

Sécurité et vie privée

Marketing ciblé La position des usagers peut être utilisé pour classer les clients dans des

applications de marketing ciblés.

Embarras Connaître la position d’un autre usager peut conduire à des situations

embarrassantes.

Harcèlement Les informations de localisation peuvent être utilisées pour harceler ou attaquer un

usager

Déni de service Une compagnie d’assurance pourrait refuser une réclamation si elle apprend qu’un

usager a visité une zone à haut risque

Restrictions légales Certains pays règlemente l’utilisation des données personnelles

CONCLUSION : les usagers doivent savoir quand leur position est fournie à une application.

Page 28: Case Study Mobile Clients for Location- Based Services

Le standard NMEA-0183

NMEA - National Marine & Electronics Association

Transmission des données sous forme de trames caractères ASCII, tous imprimables, à la vitesse de transmission de 4800 bauds.

Le GPS délivre à intervalle régulier (généralement chaque seconde) une série trames dont la trame $GPRMC, et ce même s'il n'est pas encore dans la possibilité de donner des

informations fiables (pas assez de satellites fixés par exemple).

Chaque trame commence par le caractère $ Se termine par les caractères [CR] Retour Charriot et [LF] Retour à la

ligne

Page 29: Case Study Mobile Clients for Location- Based Services

Composition des tramesChaque trame commence par le caractère $

Suivi par un groupe de 2 lettres pour l'identifiant du récepteur.(non limitatif) citons: GP pour Global Positioning System. LC Loran-C receiver. OM Omega Navigation receiver. II Integrated Instrumentation (eg. AutoHelm Seatalk system).

(Pour certains fabricants propriétaires comme par exemple : Garmin, l'indication P pour propriétaire est suivie du code 3 lettres du fabricant garmin = $PGRM, puis ensuite l'identifiant de trame et le format des données sont libres pour ce fabriquant).

Puis un groupe de 3 lettres pour l'indentifiant de la trame.

GGA : pour GPS Fix et Date. (les satellites disponibles et la précision des mesures ) GLL : pour Positionnement Géographique Longitude-Latitude. GSA : pour DOP et satellites actifs. GSV : pour Satellites visibles. VTG : pour Direction (cap) et vitesse de déplacement (en noeuds et Km/h). RMC: pour données minimales exploitables spécifiques.

Suivent ensuite un certain nombre de champs (fields) séparés par une « virgule » , agissant comme séparateur de champs.

Et enfin un champs optionnel dit checksum précédé du signe * , qui représente le OR exclusif de tous les caractères compris entre $ et * (sauf les bornes $ et *), certaines trames

exigent le checksum.

Suit la fermeture de la séquence avec un [CR][LF].

Un total de 82 caractères maximum pour une trame.

Page 30: Case Study Mobile Clients for Location- Based Services

La trame GGA Données d'acquisition du FIX - GPS.

$GPGGA,123519,4807.038,N,01131.324,E,1,08,0.9,545.4,M,46.9,M, , *42

123519 = Acquisition du FIX à 12:35:19 UTC4807.038,N = Latitude 48°07.038' N01131.324,E = Longitude 11°31.324' E1 = Fix qualification : (0 = non valide, 1 = Fix GPS, 2 = Fix DGPS)08 = Nombre de satellites en poursuite.0.9 = DOP (Horizontal dilution of position) Dilution horizontale.545.4,M = Altitude, en Mètres, au dessus du MSL (mean see level) niveau moyen des Océans.46.9,M = Correction de la hauteur de la géoïde en Metres par raport à l'ellipsoîde WGS84 (MSL).(Champ vide) = nombre de secondes écoulées depuis la dernière mise à jour DGPS. (Champ vide) = Identification de la station DGPS.*42 = ChecksumNon représentés CR et LF.

Page 31: Case Study Mobile Clients for Location- Based Services

La trame GLLPosition Géographique - Longitude / Latitude - GPS

$GPGLL,4916.45,N,12311.12,W,225444,A

4916.46,N = Latitude 49°6.45' Nord.12311.12,W = Longitude 123°11.12' West (ouest)225444 = Acquisition du Fix à 22:54:44 UTCA = Données validesPas de checksumNon représentés CR et LF

Page 32: Case Study Mobile Clients for Location- Based Services

La trame GSA Satellites actifs - DOP dilution de précision -GPS

$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39

A= Sélection Automatique 2D ou 3D du FIX (M=Manuel) 3 = Fix 3D 04,05... = PRNs (N° d'Id) des satellites utilisés pour le FIX (maximum 12 satellites)2.5 = PDOP (dilution de précision)1.3 = Dilution de précision horizontale(HDOP)2.1 = Dilution de précision verticale (VDOP)*39 = ChecksumNon représentés CR et LF

Note : La DOP, dilution de précision est une indication de l'effet de la géométrie des satellites sur la précision du Fix.

Page 33: Case Study Mobile Clients for Location- Based Services

La trame GSV Satellites en vue - GPS

$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75

2 = Nombre de trames GSV avec les données complètes. 1 = Trame 1 de 2 trames (jusqu'à 3 trames)08 = Nombre de satellites visibles (SV).01 = N° d'identification du 1er Satellite.40 = Elevation en degrés du 1er Satellite.083 = Azimuth en degrés du 1er Satellite.46 = Force du signal du 1er Satellite (Plus grand=meilleur)

(Cette séquence se répète jusqu'à 4 satellites par trames.On peut donc avoir jusqu'à 3 trames GSV dans une transmision (12 satellites).)*75 = cheksumnon représentés les CR et LF

Ce qui vous explique la limitation à 12 satellites de nos petits appareils.

Page 34: Case Study Mobile Clients for Location- Based Services

La trame VTG Cap (direction) et vitesse sol GPS

$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K

054.7,T = cap réel en Degrés , T (True track made good)034.4,M = cap vrai magnétique en Degrés (Magnetic track made good)005.5,N = Vitesse du déplacement par rapport au sol en Noeuds (N) 010.2,K = Vitesse du déplacement par rapport au sol en Kilomètres heure. (K)

non représentés CR et LF

Page 35: Case Study Mobile Clients for Location- Based Services

La trame RMC Données minimales recommandées de spécification GPS

$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68

225446 = Heure du Fix 22:54:46 UTCA = Alerte du logigiel de navigation ( A = OK, V = warning (alerte)) 4916.45,N = Latitude 49°16.45' North12311.12,W = Longitude 123°11.12' West000.5 = vitesse sol, Knots054.7 = cap (vrai) 191194 = Date du fix 19 Novembre 1994020.3,E = Déclinaison Magnetique 20.3 deg Est*68 = checksum obligatoireNon représentés CR et LF

Ces données "minimales" , sont le plus souvent utilisées dans les programmes de navigation-GPS simples.

Page 36: Case Study Mobile Clients for Location- Based Services

Visualiser les données GPS

PC et Pocket PC (freeware) WDGPS: Outil freeware de connexion

GPS et de conversions multiformats http://www.wdgps.com/

Pocket PC http://www.wdgps.com/WDGPS_CE.html

Page 37: Case Study Mobile Clients for Location- Based Services
Page 38: Case Study Mobile Clients for Location- Based Services

Application Java

Code libre GPSylon

http://www.tegmento.org/gpsylon/

Google Maps+NMEA http://googlemapsnmea.sourceforge.net/

Code libre ? (rapport) Librairie Java pour l’utilisation d’un récepteur GPS

Bluetooth sur téléphone mobile http://72.14.205.104/search?

q=cache:6DQqmZXQIBsJ:www.universal-locator.com/rapport.pdf+NMEA+GPS+tutorial+Java&hl=fr&ct=clnk&cd=6

Page 39: Case Study Mobile Clients for Location- Based Services

Références

Enterprise J2ME

Chapitre 18

Let the mobile games begin

http://www.javaworld.com/javaworld/jw-05-2003/jw-0516-wireless.html?page=1

JSR 179: Location API for J2ME

http://www.jcp.org/en/jsr/detail?id=179 http://www.forum.nokia.com/document/Java_ME_Developers_Library_v1/GUID-4AEC8DAF-DDC

C-4A30-B820-23F2BA60EA52/index.html

J2ME and Location-Based Services

http://developers.sun.com/mobility/apis/articles/location/

NMEA

http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=17661