ubicacion - Mostrar ruta en los mapas de iOS 7: addOverlay no tiene efecto
no hay rutas disponibles desde esta ubicacion (1)
Quiero mostrar una ruta punto a punto dentro de mi mapView, uso 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];
}
}
En realidad este código no hace nada.
Si intento imprimir la distancia de la ruta, obtengo el valor correcto:
route distance: 1910.000000
entonces la ruta es correcta, pero no entiendo por qué no aparece en el mapa.
¿Alguna sugerencia?
Después de un día de investigación he resuelto con estos 3 pasos:
- Establecer el delegado (
self.mapView.delegate = self
). - importar el
MKMapViewDelegate
- Implemente el nuevo método del delegado MapView para iOS7:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay(id<MKOverlay>)overlay
:
esta es mi implementacion
- (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 cuando agrega la polilínea en el mapa.