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

Mobile Clients for Location-Based Services

Présentations similaires


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

1 Mobile Clients for Location-Based Services
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 Services de recherche
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 { /* 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 {

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 = " go.addActionListener(this); // construction de l’interface go = new Button("Go"); 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 = " 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);

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
Differential Global Positioning System (DGPS) is an enhancement to Global Positioning System that uses a network of fixed ground based reference stations to broadcast the difference between the positions indicated by the satellite systems and the known fixed positions.

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 CLDC v1.1 minimum JSR Location API for J2ME

23 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);

24 La classe StepTracker public StepTracker implements LocationListener {
// 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.

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

27 Sécurité et vie privée Marketing ciblé Embarras Harcèlement
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.

28 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

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

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, , *42 = 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) ,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*68 = 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
PC et Pocket PC (freeware) WDGPS: Outil freeware de connexion GPS et de conversions multiformats Pocket PC

37

38 Application Java Code libre Code libre ? (rapport) GPSylon
Google Maps+NMEA Code libre ? (rapport) Librairie Java pour l’utilisation d’un récepteur GPS Bluetooth sur téléphone mobile

39 Références Enterprise J2ME Chapitre 18 Let the mobile games begin JSR 179: Location API for J2ME J2ME and Location-Based Services NMEA


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

Présentations similaires


Annonces Google