quiero mostrar un punto a punto de la ruta dentro de mi mapView, puedo usar este código para crear la ruta:

- (IBAction)backToYourCar {
    MKPlacemark *sourcePlacemark = [[MKPlacemark alloc] initWithCoordinate:self.annotationForCar.coordinate addressDictionary:nil];
    NSLog(@"coordiante : locationIniziale %f", sourcePlacemark.coordinate.latitude);
    MKMapItem *carPosition = [[MKMapItem alloc] initWithPlacemark:sourcePlacemark];
    MKMapItem *actualPosition = [MKMapItem mapItemForCurrentLocation];
    NSLog(@"coordiante : source %f, ActualPosition %f", carPosition.placemark.coordinate.latitude ,actualPosition.placemark.coordinate.latitude);
    MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
    request.source = actualPosition;
    request.destination = carPosition;
    request.requestsAlternateRoutes = YES;

    MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
        if (error) {
            NSLog(@"Error : %@", error);
        }
        else {
            [self showDirections:response]; //response is provided by the CompletionHandler
        }
    }];
}

y esto para mostrar la ruta en el mapa:

- (void)showDirections:(MKDirectionsResponse *)response
{
    for (MKRoute *route in response.routes) {
        [self.mapView addOverlay:route.polyline level:MKOverlayLevelAboveRoads];
    }
}

realidad este código no hace nada.

si trato de imprimir la distancia de la ruta puedo obtener el valor correcto:

route distance: 1910.000000

a continuación, la ruta es correcta, pero no puedo entender por qué no aparece en el mapa!

Alguna sugerencia?

  • ¿Cómo se annotationForCar configurado entonces? Usted necesita una coordenada para que todo funcione…
  • Sí, annotationForCar es un MKPointAnnotation y se muestran correctamente en el mapView
InformationsquelleAutor Max_Power89 | 2013-09-14

1 Comentario

  1. 50

    después de un día de investigación, me han resuelto con este 3 pasos:

    1. Establecer el delegado (self.mapView.delegate = self).
    2. importar el MKMapViewDelegate
    3. Implemente el nuevo iOS7 MapView delegado método:
      - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay(id<MKOverlay>)overlay:

    esta es mi aplicación:

    - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
    {
        if ([overlay isKindOfClass:[MKPolyline class]]) {
            MKPolyline *route = overlay;
            MKPolylineRenderer *routeRenderer = [[MKPolylineRenderer alloc] initWithPolyline:route];
            routeRenderer.strokeColor = [UIColor blueColor];
            return routeRenderer;
        }
        else return nil;
    }

    este método es llamado automáticamente por el delegado al agregar la polilínea en el mapa.

    • Cuando agrego MKPolyLine en MKMapView, me estoy poniendo de mala aceess accidente.El detalle es que aquí stackoverflow.com/questions/18956149/… se Puede averiguar alguna solución??
    • Muchas gracias por el delegado método!
    • Me quedé con esta, también, porque me perdí el método de delegado. Apple debería incluir definitivamente esta sugerencia en la documentación de la Ubicación y Mapas de la Guía de Programación.
    • Muchas gracias, solucionado el problema.

Dejar respuesta

Please enter your comment!
Please enter your name here