1 / 39

Case Study

Case Study. Mobile Clients for Location-Based Services. Plan. 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

crescent
Download Presentation

Case Study

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Case Study Mobile Clients for Location-Based Services

  2. Plan

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

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

  5. Architecture de base • Pour trouver un trajet, il faut faire plusieurs requêtes • Coûteux et long • Introduire une façade

  6. 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)

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

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

  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 • 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

  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 • 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

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

  22. 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);

  23. La classe StepTracker 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. } }

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

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

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

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

  28. 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: • 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.

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

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

  31. 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*39A= 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 LFNote : 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.

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

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

  34. 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 LFCes données "minimales" , sont le plus souvent utilisées dans les programmes de navigation-GPS simples.

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

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

  37. 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-DDCC-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

More Related