Google Directions API Polyline未添加到地图中

时间:2012-05-30 02:46:58

标签: iphone objective-c ios mapkit mkoverlay

使用Google Directions API时遇到问题。 我正在获取JSON字符串并对其进行解析,获取overview_polylines字符串

NSString *allPolylines = [NSString stringWithFormat:[[[routes objectAtIndex:0] objectForKey:@"overview_polyline"] objectForKey:@"points"]];

这件事有效。 我无法将其添加到地图中。 我正在使用这篇帖子http://iosguy.com/tag/directions-api/,这似乎正是我所追求的。

我已经实施了

-(NSMutableArray *)decodePolyLine:(NSString *)encodedStr

方法,效果很好。我NSLog了结果,它显示出我正在输出CLLocation对象。

问题在于我无法让它显示在地图上。这是以下代码

    NSMutableArray *_path = [self decodePolyLine:allPolylines];
    NSInteger numberOfSteps = _path.count;

    CLLocationCoordinate2D coordinates[numberOfSteps];
    for (NSInteger index = 0; index < numberOfSteps; index++) {
        CLLocation *location = [_path objectAtIndex:index];
        CLLocationCoordinate2D coordinate = location.coordinate;

        coordinates[index] = coordinate;
    }

    MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps];
    [_mapView addOverlay:polyLine];
    [self mapView:_mapView viewForOverlay:polyLine];

我还尝试添加对

的显式调用
[self mapView:_mapView viewForOverlay:polyLine];

是:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
    polylineView.strokeColor = [UIColor redColor];
    polylineView.lineWidth = 1.0;

    return polylineView;
}

调用最后一个方法,我使用NSLog检查,但地图上没有显示任何内容。

有什么想法? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

显示的代码看起来没问题,只是你不应该直接拨打viewForOverlay

当需要显示叠加层时,地图视图将调用该委托方法。

它不会调用委托方法的最简单原因是未设置地图视图的delegate属性。

如果设置了delegate属性,则验证坐标是否符合预期,并确保它们没有翻转(纬度经度,反之亦然)。

要检查的另一件事:
如果_mapView是IBOutlet,请确保它实际上已连接到xib中的地图视图。