L’atout cartographie en mobilité : implémentation pratique et cas concrets

970 views
815 views

Published on

A travers cette session nous allons aborder les bases de l’exploitation de la cartographie au sein des périphériques Windows Phone 8 et Windows 8 pour comprendre comment exploiter ses capacités de présentation et de visualisation avancées au sein de contrôles interactifs. Nous suivrons un cas concret et pratique que nous implémenterons en scénario de mobilité et que nous étendrons en termes de fonctionnalités à l’aide de traitements serveur spécifiques et répondre ainsi à des cas d’usage réels tels que la gestion de livraison et l’optimisation de tournée, la recherche dans des zones de chalandise, de recherche le long d’un itinéraire. Cas pratiques, architecture et implémentation technique, cette session s’adresse aux développeurs et aux décideurs souhaitant aller beaucoup plus loin et compléter l’expérience locale dans les applications mobiles.

Speakers : Jonathan Antoine (MVP), Nicolas Boonaert (MVP)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
970
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Introduction
  • L’atout cartographie en mobilité : implémentation pratique et cas concrets

    1. 1. L'atout cartographie en mobilité implémentation pratique et cas concrets Jonathan Antoine MVP Infinite Square Nicolas Boonaert MVP Wygwam jantoine@infinitesquare.com nicolas.boonaert@wygwam.com Code/Développement
    2. 2. AGENDA #mstechdays Code/Développement
    3. 3. Agenda • Contexte • Grand public : Application WP8 • Central d’appel : Application Windows 8.1 • Dépanneur : Application WP8 • Conclusions #mstechdays Code/Développement
    4. 4. Infinite Square stand 19  Société de conseil, expertise, réalisation, formation, spécialisée dans le développement d’applications logicielles innovantes sur les technologies Microsoft  100% des consultants certifiés Microsoft, parmi lesquels 10 MVP et 2 Nokia Champions  GOLD CertifiedPartner sur 5 domaines de compétences  Centre de formation agrée #mstechdays Infinite Square aux TechDays 2014
    5. 5. Wygwam stand 40 Wygwam est un pure player Microsoft, Gold Partner délivrant des services de Conseil/Expertise, design, développement et formation à nos clients Grands Comptes, PME et éditeurs de logiciels. Société à taille humaine, innovante et fondée sur des valeurs, nos collaborateurs sont réactifs, passionnés. Wygwam vous accompagne dans ces domaines: Stratégies digitales et mobiles : Windows 8, e-commerce, applications et sites web, Windows Phone Travail collaboratif : SharePoint, Réseaux Sociaux d'Entreprise NUI, design d'interaction, Azure, BI, ALM et cartographie. #mstechdays Code/Développement
    6. 6. CONTEXTE Description de l’ensemble de l’application #mstechdays Code/Développement
    7. 7. Contexte – Présentation du scénario Grand public Windows Phone 8 #mstechdays Central d’assurance Windows 8 Code/Développement Dépanneur Windows Phone 8
    8. 8. Contexte – Un regard technique Clients applicatifs Plateforme Azure Base de données API d’exposition SQL Azure (SQL Server 2012) Hosté au sein d’un service Azure Utilisation du type géographique Instance dédiée Entity Framework Grand public Windows Phone 8 Web API Controller Central d’assurance Windows 8 Dépanneur Windows Phone 8 #mstechdays Code/Développement
    9. 9. GRAND PUBLIC Application Windows Phone 8 #mstechdays Code/Développement
    10. 10. Grand public – WP8 - Fonctionnalités • Affichage du trafic temps réel et position de l’utilisateur • Déclaration d’un incident – Mineur : l’utilisateur reste autonome – Majeur : la centrale d’assurance assiste l’utilisateur #mstechdays Code/Développement
    11. 11. Utilisation de la position courante • Configuration dans le manifest ID_CAP_LOCATION • Les coordonnées retournées sont issues du système WGS84 #mstechdays Code/Développement
    12. 12. Utilisation de la position courante • Récupération unique var geolocator = new Geolocator { DesiredAccuracyInMeters = 50 }; try { Geoposition geoposition = await geolocator.GetGeopositionAsync( maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10)); var coordinate = geoposition.Coordinate; } catch (Exception ex) { } #mstechdays Code/Développement
    13. 13. Utilisation de la position courante • Récupération régulière var geolocator = new Geolocator { DesiredAccuracy = PositionAccuracy.High, MovementThreshold = 100 }; geolocator.StatusChanged += (_, argsStatus) => // Pas sur le thread UI Deployment.Current.Dispatcher.BeginInvoke(() => { var gpsStatus = argsStatus.Status; }); geolocator.PositionChanged += (_, argsPosition) => { var coordinate = argsPosition.Position.Coordinate; }; #mstechdays Code/Développement
    14. 14. Affichage d’une carte • • • • Manifest ID_CAP_MAP Token du Store à indiquer Contrôle XAML classique « Map » Propriétés intéressantes – ZoomLevel – CartographicMode (Aerial, Terrain, Road, …) – LandmarksEnabled, PedestrianFeaturesEnabled #mstechdays Code/Développement
    15. 15. Affichage d’une carte – outil utile • Installer le Windows Phone Toolkit • Conversion GeoCoordinate  Geocoordinate • Ajouts simplifiés – PushPin – Localisation de l’utilisateur – Etc. #mstechdays Code/Développement
    16. 16. Manipulation d’une carte • Ajout de punaise personnalisée <toolkit:Pushpin GeoCoordinate="{Binding InterventionLocation}" Background="{StaticResource TdBlueBrush}" Visibility="{Binding IsXX,Converter={StaticResource BooleanToVisibilityConverter}}"> <Image Source="/Assets/Images/SinisterPushPinContent.png" /> </toolkit:Pushpin> • Ajout de polygones var dynamicPolyline = new MapPolygon { StrokeColor = Color.FromArgb(255, 62, 181, 50), Path = geoCoordinateCollection, }; Map.MapElements.Add(dynamicPolyline); #mstechdays Code/Développement
    17. 17. Cartes statiques • La plateforme Bing Maps propose des cartes statiques délivrées sous formes d’images • Très pratiques pour les affichages de tuiles imageUriFormat = "http://dev.virtualearth.net/REST/v1/Imagery/Map/" + "Road/" + // Type de carte "{0},{1}/" + // Coordonnées "14?" + // Zoom "mapSize={2}" + // Dimensions de l'image "&mapLayer=TrafficFlow" + // une seule valeur possible "&format=jpeg" + "&pp={0},{1};97;" + // Pushpin "&key=CeNeSontPasLesApiKeysQueTuRecherches"; #mstechdays Code/Développement
    18. 18. Cartes statiques – Epinglage sur l’accueil var ftd = new FlipTileData(){Title=«centre.Title »}; ftd.WideBackgroundImage = new Uri( string.Format( imageUriFormat, c.Location.Latitude, c.Location.Longitude, "691,336"), UriKind.Absolute); ShellTile.Create(new Uri("/Views/HomePage.xaml", UriKind.Relative), ftd, true); #mstechdays Code/Développement
    19. 19. Utilisation des protocoles d’application • Lancement de l’application de guidage – En voiture : (Lancement de Here Drive par défaut) ms-drive-to: ?destination.latitude=50.2546&destination.longitude=3.5646&destination.name=Pal ais%20des%20Congrés,Paris,France – A pied : (Lancement de Here Maps par défaut) ms-walk-to: ?destination.latitude=50.2546&destination.longitude=3.5646&destination.latitude =50,2656&destination.longitude=3,456 #mstechdays Code/Développement
    20. 20. Utilisation des protocoles d’application • Les launchers simplifiés – Disponible en ligne : https://github.com/nokia-developer/here-launchers – Package Nuget : HereLauncher – Simplifie l’utilisation des applications de Nokia : new Nokia.Phone.HereLaunchers.GuidanceDriveTask() { Destination = selectedCenter.Location.GeoCoordinate, Title = selectedCenter.Title }.Show(); #mstechdays Code/Développement
    21. 21. APPLICATION GRAND PUBLIC Windows Phone 8 #mstechdays Code/Développement
    22. 22. CENTRAL D’APPEL Application Windows 8 #mstechdays Code/Développement
    23. 23. Central d’appel - W8 - Fonctionnalités • Visualisation des incidents • Recherche par isochrone • Affectation des missions #mstechdays Code/Développement
    24. 24. Affichage d’une carte • Les solutions possibles : Contrôle Natif - C++/.Net Contrôle JavaScript - WinJS Code en C++/C#/VB.Net Code HTML+JavaScript Intégration en XAML Développement basé sur l’API JS v7 Basé sur un moteur accéléré pour le rendu Basé sur les capacités du navigateur • Le SDK .Net disponible dans la galerie : – http://bit.ly/1elE1XL #mstechdays Code/Développement
    25. 25. Recherche basée sur le temps de parcours • Appel à la plateforme Here Location Platform http://route.st.nlp.nokia.com/routing/6.2/calculateisoline.json?mo – Requête : de=fastest;car;traffic:enabled&start=geo!50.5308609,3.3846903&time =P0Y0M0DT0H15M0S – Réponse : #mstechdays Code/Développement
    26. 26. Recherche par temps de parcours • Requête à la base de données via Entity Framework et le type géographique var polygon = DbGeographyHelper.CreatePolygon(wkt); partners = ctx.Partners.Include(m => m.Incidents).Include(m => m.PartnerEquipments) .Where(i => i.Location.Intersects(polygon)).Take(limit) .ToList(); #mstechdays Code/Développement
    27. 27. Recherche par temps de parcours • Affichage de la carte – En XAML, l’ajout du contrôle : <maps:Map Credentials="BINGMAPSKEY" Width="966" MapType="Road" ShowTraffic="True" ShowBuildings="True" ShowBreadcrumb="True" ShowScaleBar="True" Height="600" x:Name="Map"></maps:Map> #mstechdays Code/Développement
    28. 28. Recherche par temps de parcours • Ajout du calque des entités : // Add a shape layer var layer = new MapShapeLayer(); this.Map.ShapeLayers.Add(layer); • Ajout du polygone : // Create and add the polygon var polygon = new MapPolygon() { Locations = locationCollection }; polygon.FillColor = Color.FromArgb(75, 50, 158, 181); polygon.Visible = true; layer.Shapes.Add(polygon); #mstechdays Code/Développement
    29. 29. Recherche par temps de parcours • Création et ajout du contour : layer.Shapes.Add(new MapPolyline() { Width = 5, Locations = locationCollection, Color = Color.FromArgb(255, 50, 158, 181), Visible = true }); • Positionnement de la vue : this.Map.SetView(new LocationRect(locationCollection)); #mstechdays Code/Développement
    30. 30. Recherche par temps de parcours • Affichage des résultats foreach (var partner in o.Partners) { Pushpin p = new Pushpin() { Text = (i++).ToString() }; MapLayer.SetPosition(p, new Location() { Latitude = partner.Latitude, Longitude = partner.Longitude }); this.Map.Children.Add(p); } #mstechdays Code/Développement
    31. 31. APPLICATION DE CENTRAL D’APPEL Windows 8 #mstechdays Code/Développement
    32. 32. DÉPANNEUR Application Windows Phone 8 #mstechdays Code/Développement
    33. 33. Background agent – Cas d’usage • Récupération et notification des missions affectées • Détection du départ après intervention sans rapport • Enregistrement de la position pour rapport en fin de journée sur les distances parcourues #mstechdays Code/Développement
    34. 34. Dépanneur - WP8 – Background Agent • L’application n’est plus désactivée • Permet de suivre le déplacement de l’utilisateur #mstechdays Code/Développement
    35. 35. Background agent – Prérequis techniques • Activer la capability LOCATION • Spécifier l’exécution en background dans le manifest <DefaultTask Name ="_default" NavigationPage="MainPage.xaml"> <BackgroundExecution> <ExecutionType Name="LocationTracking" /> </BackgroundExecution> </DefaultTask> • S’abonner aux événements du Geolocator #mstechdays Code/Développement
    36. 36. Background agent – Utilisation • Evénements du Geolocator _geoloc = new Geolocator(); _geoloc.PositionChanged += geoloc_PositionChanged; _geoloc.StatusChanged += _geoloc_StatusChanged; • Les gestionnaires d’événements sont appelés lorsque la position change même lorsque l’application n’est pas au premier plan. #mstechdays Code/Développement
    37. 37. Background agent – Calcul de la distance • Configuration du Geolocator _geoloc.DesiredAccuracyInMeters = 50; //10% _geoloc.DesiredAccuracy = PositionAccuracy.Default; // Sauvegarde batterie _geoloc.MovementThreshold = 500; // Les unités sont en mètres. _geoloc.ReportInterval = 1000; // Intervalle de notification de déplacement • Simple addition  // Possible d'utiliser la méthode "Haversine" aussi (win8). var distanceSinceLastPosition = (long)LastPositionGeoCoordinate .GetDistanceTo(args.Position.Coordinate.ToGeoCoordinate()); TotalDistanceOfTheDay += distanceSinceLastPosition; #mstechdays Code/Développement
    38. 38. Background agent – Détection du comportement • Détecter l’arrivée sur intervention if (_goingToIntervention && InterventionLocation.GetDistanceTo(e.Coordinate.ToGeoCoordinate()) <= 500) • Détecter l’oubli de rapport de fin if (_trackingExitOfIntervention && d’intervention InterventionLocation.GetDistanceTo(e.Coordinate.ToGeoCoordinate()) > 500) { _trackingExitOfIntervention =_goingToIntervention = false; // Afficher un rappel à l'utilisateur } #mstechdays Code/Développement
    39. 39. Background agent – Afficher un message • L’application est au premier plan – Message box classique dans l’interface graphique • L’application est au second plan – Toasts, Tuiles, Lockscreen, TextToSpeech… #mstechdays Code/Développement
    40. 40. Background agent – Application en premier plan • RunningInBackground sur <shell:PhoneApplicationService PhoneApplicationService RunningInBackground="PhoneApplicationService_OnRunningInBackground" /> • private void Application_Activated(object sender, ActivatedEventArgs e) Evénement Activated : premier-plan { IsRunningInBackground = false; } #mstechdays Code/Développement …
    41. 41. Background agent – Toast et message • Affichage du message concrètement const string titre = "Attention"; const string contenu = "Vous avez oublié de signaler la fin d'intervention."; if (App.IsRunningInBackground) { MessageBox.Show(contenu, titre, MessageBoxButton.OK); } else { var toast = new ShellToast { Title = titre, Content = contenu }; toast.Show(); } #mstechdays Code/Développement
    42. 42. Background agent – ça marche tout le temps ? • Coupure « automatique « : – – – – – L’économiseur de batterie s’active Une autre application GPS est lancée (Nokia Drive) La mémoire du téléphone devient insuffisante L’application fonctionne depuis 4H sans interactions de l’utilisateur L’application est quittée • Coupure manuelle – Désabonnement des handlers sur le Geolocator – Appel à la méthode « Stop » du Geolocator #mstechdays Code/Développement
    43. 43. Background agent – détection de coupure • L’événement Deactivated est levé private void Application_Deactivated(object sender, DeactivatedEventArgs e){ if (e.Reason != DeactivationReason.UserAction) new ShellToast { … }.Show(); } • La raison de la coupure est indiquée #mstechdays Code/Développement
    44. 44. APPLICATION DÉPANNEUR Windows Phone 8 #mstechdays Code/Développement
    45. 45. CONCLUSIONS #mstechdays Code/Développement
    46. 46. Conclusions • L’information géographique peut apporter une dimension importante dans de nombreuses applications • Windows Phone et Windows 8.1 offrent des réelles possibilités d’interaction et scénarii riches et de récupération d’informations • Les plateformes peuvent compléter les fonctionnalités de base pour répondre aux besoins avancés dans les applications #mstechdays Code/Développement
    47. 47. Conclusions – Pour aller plus loin • Le code des exemples : – PROCHAINEMENT • Les liens utiles : MSDN - Bing Maps for W8.1 : http://msdn.microsoft.com/en-us/library/hh846481.aspx MSDN – Map Control for WP8 : http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207045(v=vs.105).aspx Here developer portal: http://developer.here.com/ #mstechdays Code/Développement
    48. 48. Donnez votre avis ! Depuis votre smartphone sur : http://notes.mstechdays.fr De nombreux lots à gagner toute les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les Techdays ! #mstechdays Code/Développement
    49. 49. Digital is business

    ×