private async void Button_Click(object sender, RoutedEventArgs e) { Geopoint lastPoint = new Geopoint(new BasicGeoposition()), currentPoint; Windows.UI.Core.DispatchedHandler actualizarTextBox = async() => { HttpClient client = new HttpClient(); HttpResponseMessage stream = await client.GetAsync(urlInicial + lugarIncialTextBox.Text + urlMedio + lugarFinalTextBox.Text + urlFinal); //Si ha obtenido una ruta como respuesta, escribe en el mapa if (stream.IsSuccessStatusCode) { String str = await stream.Content.ReadAsStringAsync(); JsonValue jsonValue = JsonValue.Parse(str); arrayRuta = jsonValue.GetObject().GetNamedArray("resourceSets").GetObjectAt(0).GetNamedArray("resources").GetObjectAt(0).GetNamedArray("routeLegs").GetObjectAt(0).GetNamedArray("itineraryItems"); //Bucle que dibuja cada punto de la ruta y la ruta entre el punto actual y el anterior en el mapa var first = arrayRuta.First(); foreach (var puntoRuta in arrayRuta) { PuntoBing puntoBing = obtenerPunto(puntoRuta.GetObject()); currentPoint = geopositionPoint(puntoBing.Latitude, puntoBing.Longitude); string nombres = ""; foreach (string nombre in puntoBing.Nombre) { nombres = nombres + Environment.NewLine + nombre; } mapIconRuta = new MapIcon { Location = currentPoint, Title = nombres }; mapView.MapElements.Add(mapIconRuta); puntos.Add(puntoBing); escribePunto(puntoBing); //Si el punto actual es el último, pasa a ser el actual en el código if (!puntoRuta.Equals(first)) { // Obtiene la ruta entre el punto anterior y el actual. MapRouteFinderResult routeResult = await MapRouteFinder.GetDrivingRouteAsync( startPoint : lastPoint, endPoint : currentPoint, optimization : MapRouteOptimization.Time, restrictions : MapRouteRestrictions.None); if (routeResult.Status == MapRouteFinderStatus.Success) { // Usa la ruta para inicializar MapRouteView. MapRouteView viewOfRoute = new MapRouteView(routeResult.Route); viewOfRoute.RouteColor = Colors.Yellow; viewOfRoute.OutlineColor = Colors.Black; // Añade el nuevo MapRouteView al conjunto de rutas // de MapControl. mapView.Routes.Add(viewOfRoute); //El punto actual se convierte en el anterior lastPoint = currentPoint; } } else { lastPoint = currentPoint; } } } else { rutaTextBox.Text = "Mal"; } }; await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, actualizarTextBox); }
private void escribePunto(PuntoBing punto) { rutaTextBox.Text = rutaTextBox.Text + Environment.NewLine + "Acción " + iteracionEscritura + " : " + Environment.NewLine + " A " + punto.Distancia + "Km " + punto.Accion; iteracionEscritura += 1; }