La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Case Study Mobile Clients for Location- Based Services.

Présentations similaires


Présentation au sujet: "Case Study Mobile Clients for Location- Based Services."— Transcription de la présentation:

1 Case Study Mobile Clients for Location- Based Services

2 Plan

3 Location-based services zPull-based yLusager envoie sa position pour obtenir de linformation zPush-based yLe fournisseur de service détecte lusager à proximité et lui transmet de linformation zGIS : geographic information systems yDéterminer une adresse à partir de la position de lusager yRecherche dans les pages jaunes yCalcul de trajets yCartes sur mesure yCoûteux et complexe à opérer xMaintenir le système xCoûts des licences xAggrégation et mise-à-jour des données géographiques xAdministration des serveurs xBon candidat pour transformation en service web

4 Service Web MapPoint zServices généraux yGetCountryRegionInfo, GetDataSourceInfo… zServices de recherche yGéocodage et géocodage inverse yPoints dintérêts zServices de calcul de parcours yTrajets, descriptions ditinéraires, cartes... zServices de rendus yMise en évidence des routes, icônes, zoom...

5 Architecture de base zPour trouver un trajet, il faut faire plusieurs requêtes yCoûteux et long yIntroduire une façade

6 Développement zGénérer les classe stubs Java pour lAPI SOAP de MapPoint zÀ partir de ces classes développer un client de plus haut niveau zTransformer le client en service web yGénérer son fichier WSDL (.wsdd)

7 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. }

8 Un client CDC

9 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 linterface 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:// :8080/axis/services/MapPoint"; go.addActionListener(this); // construction de linterface go = new Button("Go"); ETC. startScreen(); } catch (Exception e) { e.printStackTrace(); }

10 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); } //...

11 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(); }

12 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(); }

13 Un client MIDP

14 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:// :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 }

15 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); }

16 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; }

17 Location-based services z3 questions yOù suis-je ? yQuest-ce quil y a autour de moi ? yComment puis-je me rendre à un lieu donné ? zFonctionnement yDéterminer la position de lusager xSoit faire le calcul de la position au niveau du serveur et envoyer les données à lappareil xSoit obtenir des données de localisation directement à partir de lappareil de lusager yUtiliser la position et des informations complémentaires pour fournir des services personnalisés zStandard yOpen Location Services (OpenLS), un standard fondé sur XML pour faire des requêtes à un GIS

18 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

19 GPS et D(ifferential) GPS

20 Assisted GPS zPour améliorer la performance yLes 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, à lintérieur des édifices… yIncapacité à télécharger lalmanach et les éphémérides à partir des satellites GPS, incapables de fonctionner si un signal clair nest pas reçu pendant au moins 1 minutes zUn récepteur A-GPS peut résoudre ces problèmes à laide dun serveur dassistance yLe serveur dassistance peut localiser le téléphone grâce à la cellule à laquelle il est connecté. yLe serveur dassistance possède un signal satellite de qualité et de la puissance de calcul, de sorte quil peut comparer les signaux fragmentaires reçus par le téléphone cellulaire avec le signal quil reçoit et informer le téléphone cellulaire de sa position yLe serveur dassistance 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 yLe serveur dassistance possède une meilleure connaissance des conditions pouvant affecter le signal GPS (e.g. lionosphère ) permettant des calculs de position plus précis

21 Améliorer les instructions zDéterminer la position de lusager yÀ partir du terminal xGPS xGPS-lookup lent yÀ partir du réseau xOpérateurs cellulaires Position des antennes Triangulation yGPS assisté x1- utiliser le réseau pour une première approximation x2- GPS pour affiner la position yRéseau sans fil locaux xWIFI, BlueTooth, UWB yUsager xSimplement lui demander dindiquer le point de repère le plus proche

22

23 Criteria criteria = new Criteria (); Criteria.setPreferredResponseTime(20); Criteria.setVerticalAccuracy(10); //set another criteria LocationProvider provider = LocationProvider.getInstance (criteria); // the StepTrackers 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 CollisionHandlers //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);

24 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

25 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 }

26 Bonnes pratiques zGérer gracieusement la non-disponibilité du service yLa position de lusager peut ne pas être disponible xLappareil ne peut pas fournir la position du lusager à cause de la méthode de localisation utilisée Dans un canyon GPS, dans un tunnel, dans un avion…. xLusager na pas permis que lon transmette linformation de localisation xAucun fournisseur de service de localisation nest disponible actuellement. zEn fonction de la méthode utilisée, la détermination de la position peut prendre un temps prolongé yLe délai peut être tellement long que à la fin, le résultat nest plus pertinent xApplication de navigation yGarder lusager informé zLes coûts associés à certains services de localisation peuvent grimper rapidement yExemple: les méthode de localisation à laide des réseaux cellulaires yNe pas surutiliser les services tarifés zTenir compte des impératifs liés à la protection de la vie privée yInformer les clients au sujet de xdonnées de localisation recueillies sur eux xLutilisation de ces données de localisation yOffrir aux client la possibilité de choisir quelles données de localisation seront révélées yOfrir aux clients loption de ne pas participer à un service yPermettre aux clients de visualiser et réviser les permissions accordées dans leur profil de telle sorte quils sachent ce qui est permis yProtéger les informations de localisation de telle sorte quelles ne puissent pas être accédées par des personnes non-autorisées.

27 Sécurité et vie privée zMarketing ciblé yLa position des usagers peut être utilisé pour classer les clients dans des applications de marketing ciblés. zEmbarras yConnaître la position dun autre usager peut conduire à des situations embarrassantes. zHarcèlement yLes informations de localisation peuvent être utilisées pour harceler ou attaquer un usager zDéni de service yUne compagnie dassurance pourrait refuser une réclamation si elle apprend quun usager a visité une zone à haut risque zRestrictions légales yCertains pays règlemente lutilisation des données personnelles zCONCLUSION : les usagers doivent savoir quand leur position est fournie à une application.

28 Le standard NMEA-0183 zNMEA - National Marine & Electronics Association zTransmission des données sous forme de trames y caractères ASCII, tous imprimables, y à la vitesse de transmission de 4800 bauds. zLe GPS délivre yà intervalle régulier (généralement chaque seconde) yune série trames dont la trame $GPRMC, yet 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). zChaque trame ycommence par le caractère $ ySe termine par les caractères [CR] Retour Charriot et [LF] Retour à la ligne

29 Composition des trames Chaque trame commence par le caractère $ Suivi par un groupe de 2 lettres pour l'identifiant du récepteur.(non limitatif) citons: yGP pour Global Positioning System. yLC Loran-C receiver. yOM Omega Navigation receiver. yII Integrated Instrumentation (eg. AutoHelm Seatalk system). y(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. yGGA : pour GPS Fix et Date. (les satellites disponibles et la précision des mesures ) yGLL : pour Positionnement Géographique Longitude-Latitude. yGSA : pour DOP et satellites actifs. yGSV : pour Satellites visibles. yVTG : pour Direction (cap) et vitesse de déplacement (en noeuds et Km/h). yRMC: 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 *, yqui 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.

30 La trame GGA Données d'acquisition du FIX - GPS. $GPGGA,123519, ,N, ,E,1,08,0.9,545.4,M,46.9,M,, * = Acquisition du FIX à 12:35:19 UTC ,N = Latitude 48°07.038' N ,E = Longitude 11°31.324' E 1 = 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 ,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 = Checksum Non représentés CR et LF.

31 La trame GLL Position Géographique - Longitude / Latitude - GPS $GPGLL, ,N, ,W,225444,A ,N = Latitude 49°6.45' Nord ,W = Longitude 123°11.12' West (ouest) = Acquisition du Fix à 22:54:44 UTC A = Données valides Pas de checksum Non représentés CR et LF

32 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 = Checksum Non 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.

33 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 = cheksum non représentés les CR et LF Ce qui vous explique la limitation à 12 satellites de nos petits appareils.

34 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

35 La trame RMC Données minimales recommandées de spécification GPS $GPRMC,225446,A, ,N, ,W,000.5,054.7,191194,020.3,E* = Heure du Fix 22:54:46 UTC A = Alerte du logigiel de navigation ( A = OK, V = warning (alerte)) ,N = Latitude 49°16.45' North ,W = Longitude 123°11.12' West = vitesse sol, Knots = cap (vrai) = Date du fix 19 Novembre ,E = Déclinaison Magnetique 20.3 deg Est *68 = checksum obligatoire Non représentés CR et LF Ces données "minimales", sont le plus souvent utilisées dans les programmes de navigation-GPS simples.

36 Visualiser les données GPS zPC et Pocket PC (freeware) yWDGPS: Outil freeware de connexion GPS et de conversions multiformats yhttp://www.wdgps.com/ zPocket PC yhttp://www.wdgps.com/WDGPS_CE.html

37

38 Application Java zCode libre yGPSylon xhttp://www.tegmento.org/gpsylon/http://www.tegmento.org/gpsylon/ yGoogle Maps+NMEA xhttp://googlemapsnmea.sourceforge.net/http://googlemapsnmea.sourceforge.net/ zCode libre ? (rapport) yLibrairie Java pour lutilisation dun récepteur GPS Bluetooth sur téléphone mobile yhttp:// /search?q=cache:6DQqmZXQIBsJ: locator.com/rapport.pdf+NMEA+GPS+tutorial+Java&hl =fr&ct=clnk&cd=6

39 Références zEnterprise J2ME yChapitre 18 zLet the mobile games begin yhttp://www.javaworld.com/javaworld/jw /jw-0516-wireless.html?page=1http://www.javaworld.com/javaworld/jw /jw-0516-wireless.html?page=1 zJSR 179: Location API for J2ME yhttp://www.jcp.org/en/jsr/detail?id=179http://www.jcp.org/en/jsr/detail?id=179 yhttp://www.forum.nokia.com/document/Java_ME_Developers_Library_v1/GUID-4AEC8DAF-DDCC-4A30- B820-23F2BA60EA52/index.htmlhttp://www.forum.nokia.com/document/Java_ME_Developers_Library_v1/GUID-4AEC8DAF-DDCC-4A30- B820-23F2BA60EA52/index.html zJ2ME and Location-Based Services yhttp://developers.sun.com/mobility/apis/articles/location/http://developers.sun.com/mobility/apis/articles/location/ zNMEA


Télécharger ppt "Case Study Mobile Clients for Location- Based Services."

Présentations similaires


Annonces Google