/// <summary> /// Verifie les coordonnées géographiques d'un rendez-vous du Calendrier /// </summary> /// <param name="appointment">Rendez-vous</param> /// <remarks>Abonnez vous d'abord à l'évènement LocationChecked avant l'appel de cette méthode</remarks> public void CheckLocationAsync(Appointment appointment) { //Procédure de connexion et préparation de la requete GeocodeRequest request = new GeocodeRequest() { Credentials = new Credentials { ApplicationId = BingMapCredential.CREDENTIAL } }; if (appointment.Location == null) return; request.Query = appointment.Location; GeocodeServiceClient service = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService"); //Lorsque bing map nous envoie une réponse service.GeocodeCompleted += (o, e) => { Appointment a = e.UserState as Appointment; LocationCheckedEventArgs eventToSend = new LocationCheckedEventArgs(); //Construction du Meeting qui sera envoyé en résultat Meeting m = new Meeting(); m.Subject = a.Subject; m.DateTime = a.StartTime; m.Duration = (a.EndTime - a.StartTime).TotalMinutes; m.Address = a.Location; m.IsLocationFail = true; //Si dans le service bing map a trouvé les latitude et longitude de la requete if (e.Result != null) { if (e.Result.Results.Any(obj => obj.Locations != null && obj.Locations.Any()) && e.Result.Results.Count > 0) { if (e.Result.Results.FirstOrDefault().Confidence == Confidence.High && !String.IsNullOrEmpty(e.Result.Results.FirstOrDefault().Address.Locality)) { m.IsLocationFail = false; m.Location.Latitude = e.Result.Results.FirstOrDefault().Locations.FirstOrDefault().Latitude; m.Location.Longitude = e.Result.Results.FirstOrDefault().Locations.FirstOrDefault().Longitude; m.City = e.Result.Results.FirstOrDefault().Address.Locality; } } } eventToSend.Meeting = m; //On notifie l'observateur (dans ce cas, la méthode GetAllMeetingsAsync) LocationChecked(this, eventToSend); }; service.GeocodeAsync(request, appointment); }
/// <summary> /// Verifie les coordonnées géographiques d'un rendez-vous du Calendrier /// </summary> /// <param name="appointment">Rendez-vous</param> /// <remarks>Abonnez vous d'abord à l'évènement LocationChecked avant l'appel de cette méthode</remarks> public void CheckLocationAsync(Appointment appointment) { //Procédure de connexion et préparation de la requete GeocodeRequest request = new GeocodeRequest() { Credentials = new Credentials { ApplicationId = BingMapCredential.CREDENTIAL } }; if (appointment.Location == null) return; request.Query = appointment.Location; GeocodeServiceClient service = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService"); //Lorsque bing map nous envoie une réponse service.GeocodeCompleted += (o, e) => { //Construction du Meeting qui sera envoyé en résultat Meeting m = new Meeting(); m.Subject = appointment.Subject; m.DateTime = appointment.StartTime; m.Duration = (appointment.EndTime - appointment.StartTime).TotalMinutes; //Si dans le service bing map a trouvé les latitude et longitude de la requete if (e.Result == null || e.Result.Results.Count < 0 || e.Result.Results.Any(obj => obj.Locations == null && obj.Locations.Any())) { throw new Exception("Pas de géolocalisation possible"); } m.IsLocationFail = true; if (e.Result.Results.FirstOrDefault().Confidence == Confidence.High) { m.IsLocationFail = false; m.Location.Latitude = e.Result.Results.FirstOrDefault().Locations.FirstOrDefault().Latitude; m.Location.Longitude = e.Result.Results.FirstOrDefault().Locations.FirstOrDefault().Longitude; } LocationCheckedEventArgs eventToSend = new LocationCheckedEventArgs(); eventToSend.Meeting = m; //On notifie l'observateur (dans ce cas, la méthode GetAllMeetingsAsync) LocationChecked(this, eventToSend); }; service.GeocodeAsync(request); }