ios - MKDirections 不在 iOS map 上显示路线

标签 ios iphone mkmapview mapkit

我正在开发一个应用程序,我需要显示两个坐标之间的路线方向。我使用了 MKDirections 并传递了两个坐标作为源和目标,但是在 mapView 上它没有显示任何路线或绘制任何折线。下面是我的代码。在 MKDirections 中,它始终显示 nil。请让我知道我做错了什么。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.activityIndicator.hidden = YES;
    self.routeDetailsButton.hidden = YES;
    self.routeDetailsButton.enabled = NO;
    self.mapView.delegate = self;
    self.mapView.showsUserLocation = YES;
    self.navigationItem.title = @"RouteMaster";

}

#pragma mark - MapKit delegate methods

- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    CLLocationCoordinate2D loc = [userLocation.location coordinate];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 1000.0f, 1000.0f);
    [self.mapView setRegion:region animated:YES];
}


- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (IBAction)handleRoutePressed:(id)sender {
    // We're working

    CLLocationCoordinate2D sourceCoords = CLLocationCoordinate2DMake(28.6100, 77.2300);
    MKPlacemark *sourcePlacemark = [[MKPlacemark alloc] initWithCoordinate:sourceCoords addressDictionary:nil];

    MKMapItem *srcMapItem = [[MKMapItem alloc]initWithPlacemark:sourcePlacemark];

    CLLocationCoordinate2D destinationCoords = CLLocationCoordinate2DMake(18.9750, 72.8258);
    MKPlacemark *destinationPlacemark = [[MKPlacemark alloc] initWithCoordinate:destinationCoords addressDictionary:nil];

    MKMapItem *distMapItem = [[MKMapItem alloc]initWithPlacemark:destinationPlacemark];

    MKDirectionsRequest *request = [[MKDirectionsRequest alloc]init];
    [request setSource:srcMapItem];
    [request setDestination:distMapItem];

    MKDirections *direction = [[MKDirections alloc]initWithRequest:request];
    [direction calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {

         if (error)
             NSLog(@"Error %@", error.description);
        else
            NSLog(@"response = %@",response);
        NSArray *arrRoutes = [response routes];
        [arrRoutes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

            MKRoute *rout = obj;

            MKPolyline *line = [rout polyline];
            [self.mapView addOverlay:line];
            NSLog(@"Rout Name : %@",rout.name);
            NSLog(@"Total Distance (in Meters) :%f",rout.distance);

            NSArray *steps = [rout steps];

            NSLog(@"Total Steps : %lu",(unsigned long)[steps count]);

            [steps enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                NSLog(@"Rout Instruction : %@",[obj instructions]);
                NSLog(@"Rout Distance : %f",[obj distance]);
            }];
        }];
    }];

}

#pragma mark - Utility Methods
- (void)plotRouteOnMap:(MKRoute *)route
{
    if(_routeOverlay) {
        [self.mapView removeOverlay:_routeOverlay];
    }

    // Update the ivar
    _routeOverlay = route.polyline;

    // Add it to the map
    [self.mapView addOverlay:_routeOverlay];

}


#pragma mark - MKMapViewDelegate methods
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
    renderer.strokeColor = [UIColor redColor];
    renderer.lineWidth = 4.0;
    return  renderer;
}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay {

    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView* aView = [[MKPolylineView alloc]initWithPolyline:(MKPolyline*)overlay] ;
        aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.5];
        aView.lineWidth = 10;
        return aView;
    }
    return nil;
}

最佳答案

如果 [_mapView setRegion:region] 区域和折线路径路径不在同一区域(两者应该需要显示在同一屏幕上),则通常会发生此错误。 就我而言,我正在搜索美国路线路径,而我所在的地区是印度。所以它不会调用 -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay;功能。

关于ios - MKDirections 不在 iOS map 上显示路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24360977/

相关文章:

Objective-C++ 导入 C++ 类失败,找不到 cassert

iphone - 谷歌iPhone应用状态栏动画他们是怎么做到的?

iphone - 有效的 UDID?

iphone - 为什么我在 iOS 上使用 tan() 函数会遇到这个问题?

ios - 后台CLLocationManager在15分钟后停止更新

swift - 使用 Swift 进行正向地理编码

iphone - 来自 ExtAudioFileWriteAsync 的 EXC_BAD_ACCESS

ios - BLE 只获取 Battery Level 特征值 IOS

objective-c - MKMapView didDeselectAnnotationView 与 UITableView 交互

ios - 创建 iPhone 6 Plus 特定的 UI 元素(最好使用自动布局)