L’atout cartographie en mobilité : implémentation pratique et cas concrets
-
Upload
microsoft-developpeurs -
Category
Technology
-
view
679 -
download
1
description
Transcript of L’atout cartographie en mobilité : implémentation pratique et cas concrets
Code/Développement
L'atout cartographie en mobilité
implémentation pratique et cas concretsJonathan Antoine
MVPInfinite Square
Nicolas BoonaertMVP
Code/Développement#mstechdays
AGENDA
#mstechdaysCode/Développement
• Contexte
• Grand public : Application WP8• Central d’appel : Application Windows
8.1• Dépanneur : Application WP8
• Conclusions
Agenda
Infinite Square aux TechDays 2014#mstechdays
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 Certified Partner sur 5 domaines de compétences
Centre de formation agrée
Infinite Square stand 19
Code/Développement#mstechdays
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 PhoneTravail collaboratif : SharePoint, Réseaux Sociaux d'EntrepriseNUI, design d'interaction, Azure, BI, ALM et cartographie.
Code/Développement#mstechdays
CONTEXTE
Description de l’ensemblede l’application
#mstechdaysCode/Développement
Contexte – Présentation du scénario
Grand publicWindows Phone 8
DépanneurWindows Phone 8
Central d’assuranceWindows 8
#mstechdaysCode/Développement
Contexte – Un regard techniquePlateforme Azure
API d’expositionHosté au sein d’un service Azure
Base de donnéesSQL Azure (SQL Server 2012)
Utilisation du type géographique
Instance dédiée
Entity Framework
Web API Controller
Grand publicWindows Phone 8
Central d’assuranceWindows 8
DépanneurWindows Phone 8
Clients applicatifs
Code/Développement#mstechdays
GRAND PUBLIC
Application Windows Phone 8
#mstechdaysCode/Développement
• 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
Grand public – WP8 - Fonctionnalités
#mstechdaysCode/Développement
• Configuration dans le manifest
• Les coordonnées retournéessont issues du système WGS84
Utilisation de la position courante
ID_CAP_LOCATION
#mstechdaysCode/Développement
• Récupération unique
Utilisation de la position courante
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){}
#mstechdaysCode/Développement
• Récupération régulière
Utilisation de la position courante
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;};
#mstechdaysCode/Développement
• Manifest• Token du Store à indiquer• Contrôle XAML classique « Map »• Propriétés intéressantes
– ZoomLevel– CartographicMode (Aerial, Terrain, Road, …)– LandmarksEnabled, PedestrianFeaturesEnabled
Affichage d’une carteID_CAP_MAP
#mstechdaysCode/Développement
• Installer le Windows Phone Toolkit• Conversion GeoCoordinate
Geocoordinate• Ajouts simplifiés
– PushPin– Localisation de l’utilisateur– Etc.
Affichage d’une carte – outil utile
#mstechdaysCode/Développement
• Ajout de punaise personnalisée
• Ajout de polygones
Manipulation d’une carte
<toolkit:Pushpin GeoCoordinate="{Binding InterventionLocation}" Background="{StaticResource TdBlueBrush}" Visibility="{Binding IsXX,Converter={StaticResource BooleanToVisibilityConverter}}"> <Image Source="/Assets/Images/SinisterPushPinContent.png" /></toolkit:Pushpin>
var dynamicPolyline = new MapPolygon {StrokeColor = Color.FromArgb(255, 62, 181, 50),Path = geoCoordinateCollection,
};
Map.MapElements.Add(dynamicPolyline);
#mstechdaysCode/Développement
• La plateforme Bing Maps propose des cartes statiques délivrées sous formes d’images
• Très pratiques pour les affichages de tuiles
Cartes statiques
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";
#mstechdaysCode/Développement
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);
#mstechdaysCode/Développement
• Lancement de l’application de guidage– En voiture : (Lancement de Here Drive par
défaut)
– A pied : (Lancement de Here Maps par défaut)
Utilisation des protocoles d’application
ms-drive-to:?destination.latitude=50.2546&destination.longitude=3.5646&destination.name=Palais%20des%20Congrés,Paris,France
ms-walk-to:?destination.latitude=50.2546&destination.longitude=3.5646&destination.latitude=50,2656&destination.longitude=3,456
#mstechdaysCode/Développement
• Les launchers simplifiés– Disponible en ligne :https://github.com/nokia-developer/here-launchers – Package Nuget : HereLauncher– Simplifie l’utilisation des applications de Nokia :
Utilisation des protocoles d’application
new Nokia.Phone.HereLaunchers.GuidanceDriveTask(){ Destination = selectedCenter.Location.GeoCoordinate, Title = selectedCenter.Title}.Show();
démo
#mstechdaysCode/Développement
APPLICATION GRAND PUBLIC
Windows Phone 8
Code/Développement#mstechdays
CENTRAL D’APPELApplication Windows 8
#mstechdaysCode/Développement
• Visualisation des incidents• Recherche par isochrone• Affectation des missions
Central d’appel - W8 - Fonctionnalités
#mstechdaysCode/Développement
• Les solutions possibles :
• Le SDK .Net disponible dans la galerie :– http://bit.ly/1elE1XL
Affichage d’une carte
Contrôle Natif - C++/.Net
Code en C++/C#/VB.Net
Intégration en XAML
Basé sur un moteur accéléré pour le rendu
Contrôle JavaScript - WinJS
Code HTML+JavaScript
Développement basé sur l’API JS v7
Basé sur les capacités du navigateur
#mstechdaysCode/Développement
• Appel à la plateforme Here Location Platform– Requête :
– Réponse :
Recherche basée sur le temps de parcours
http://route.st.nlp.nokia.com/routing/6.2/calculateisoline.json?mode=fastest;car;traffic:enabled&start=geo!50.5308609,3.3846903&time=P0Y0M0DT0H15M0S
#mstechdaysCode/Développement
• Requête à la base de données via Entity Framework et le type géographique
Recherche par temps de parcours
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();
#mstechdaysCode/Développement
• Affichage de la carte– En XAML, l’ajout du contrôle :
Recherche par temps de parcours
<maps:Map Credentials="BINGMAPSKEY" Width="966" MapType="Road" ShowTraffic="True" ShowBuildings="True" ShowBreadcrumb="True" ShowScaleBar="True" Height="600" x:Name="Map"></maps:Map>
#mstechdaysCode/Développement
• Ajout du calque des entités :
• Ajout du polygone :
Recherche par temps de parcours
// Add a shape layervar layer = new MapShapeLayer();this.Map.ShapeLayers.Add(layer);
// Create and add the polygonvar polygon = new MapPolygon() { Locations = locationCollection };polygon.FillColor = Color.FromArgb(75, 50, 158, 181);polygon.Visible = true;layer.Shapes.Add(polygon);
#mstechdaysCode/Développement
• Création et ajout du contour :
• Positionnement de la vue :
Recherche par temps de parcours
layer.Shapes.Add(new MapPolyline(){ Width = 5, Locations = locationCollection, Color = Color.FromArgb(255, 50, 158, 181), Visible = true});
this.Map.SetView(new LocationRect(locationCollection));
#mstechdaysCode/Développement
• Affichage des résultats
Recherche par temps de parcours
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);}
démo
#mstechdaysCode/Développement
APPLICATION DE CENTRAL D’APPELWindows 8
Code/Développement#mstechdays
DÉPANNEUR
Application Windows Phone 8
#mstechdaysCode/Développement
• 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
Background agent – Cas d’usage
#mstechdaysCode/Développement
• L’application n’est plus désactivée
• Permet de suivre le déplacement de l’utilisateur
Dépanneur - WP8 – Background Agent
#mstechdaysCode/Développement
• Activer la capability LOCATION• Spécifier l’exécution en background
dans le manifest
• S’abonner aux événements du Geolocator
Background agent – Prérequis techniques
<DefaultTask Name ="_default" NavigationPage="MainPage.xaml"> <BackgroundExecution> <ExecutionType Name="LocationTracking" /> </BackgroundExecution> </DefaultTask>
#mstechdaysCode/Développement
• Evénements du Geolocator
• Les gestionnaires d’événements sont appelés lorsque la position change même lorsque l’application n’est pas au premier plan.
Background agent – Utilisation
_geoloc = new Geolocator();_geoloc.PositionChanged += geoloc_PositionChanged;_geoloc.StatusChanged += _geoloc_StatusChanged;
#mstechdaysCode/Développement
• Configuration du Geolocator
• Simple addition
Background agent – Calcul de la distance
_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
// Possible d'utiliser la méthode "Haversine" aussi (win8).var distanceSinceLastPosition = (long)LastPositionGeoCoordinate .GetDistanceTo(args.Position.Coordinate.ToGeoCoordinate());TotalDistanceOfTheDay += distanceSinceLastPosition;
#mstechdaysCode/Développement
• Détecter l’arrivée sur intervention
• Détecter l’oubli de rapport de fin d’intervention
Background agent – Détection du comportement
if (_goingToIntervention && InterventionLocation.GetDistanceTo(e.Coordinate.ToGeoCoordinate()) <= 500)
if (_trackingExitOfIntervention && InterventionLocation.GetDistanceTo(e.Coordinate.ToGeoCoordinate()) > 500){ _trackingExitOfIntervention =_goingToIntervention = false; // Afficher un rappel à l'utilisateur}
#mstechdaysCode/Développement
• L’application est au premier plan– Message box classique dans l’interface
graphique
• L’application est au second plan– Toasts, Tuiles, Lockscreen, TextToSpeech…
Background agent – Afficher un message
#mstechdaysCode/Développement
• RunningInBackground sur PhoneApplicationService
• Evénement Activated : premier-plan
Background agent – Application en premier plan
<shell:PhoneApplicationService RunningInBackground="PhoneApplicationService_OnRunningInBackground" … />
private void Application_Activated(object sender, ActivatedEventArgs e){ IsRunningInBackground = false;}
#mstechdaysCode/Développement
• Affichage du message concrètement
Background agent – Toast et message
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();}
#mstechdaysCode/Développement
• 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
Background agent – ça marche tout le temps ?
#mstechdaysCode/Développement
• L’événement Deactivated est levé
• La raison de la coupure est indiquée
Background agent – détection de coupure
private void Application_Deactivated(object sender, DeactivatedEventArgs e){ if (e.Reason != DeactivationReason.UserAction)
new ShellToast { … }.Show(); }
démo
#mstechdaysCode/Développement
APPLICATION DÉPANNEUR
Windows Phone 8
Code/Développement#mstechdays
CONCLUSIONS
#mstechdaysCode/Développement
• 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
Conclusions
#mstechdaysCode/Développement
• Le code des exemples :– PROCHAINEMENT
• Les liens utiles :MSDN - Bing Maps for W8.1 : http://msdn.microsoft.com/en-us/library/hh846481.aspxMSDN – 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/
Conclusions – Pour aller plus loin
#mstechdaysCode/Développement
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 !
Donnez votre avis !
© 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Digital is business