在iOS7中的MKMapView上显示MKRoute

时间:2013-09-24 07:40:39

标签: ios ios7 mkmapview

我正在使用MKDirectionsRequest在两点之间找到MKRoute。 响应将使用以下代码显示在MKMapView上:

MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error)
     {
         if (error)
         {
             NSLog(@"Error : %@", error);
         }
         else
         {
             [_mapView removeOverlays:_mapView.overlays];
             for (MKRoute *route in response.routes)
             {
                 [_mapView insertOverlay:route.polyline atIndex:0 level:MKOverlayLevelAboveRoads];
             }
         }
     }];

我的问题是,如果用户正在移动,是否有正确的方法来更新MKRoute。我正在使用

- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation

识别移动,在这种方法中,我正在移除MKRoute叠加层,并计算新的用户位置并添加新的用户位置。 我想知道是否有办法只计算一次路由并以编程方式更新叠加层?

修改 我在Apples Dev Docs中找到了这个https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep。 我想我必须做一些像

这样的事情
for (MKRoute *route in response.routes)
{
   for (MKRouteStep *step in route.steps) 
   {
      [_mapView insertOverlay:step.polyline atIndex:0 level:MKOverlayLevelAboveRoads];
   }
}

但我如何识别哪些步骤隐藏实际的用户位置?

编辑:另一个选项可能是使用触发事件的计时器(删除旧的叠加层并添加新的叠加层)。你觉得怎么样?

[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(addRouteOverlay) userInfo:nil repeats:YES];

2 个答案:

答案 0 :(得分:0)

下面的链接包含显示MKMapView上方向的示例代码,我们只需要在其中传递纬度和经度值。

https://github.com/kadirpekel/MapWithRoutes

答案 1 :(得分:-2)

我有一个很好的解决方案来做这种工作。

简单地说,使用lat(如-34.059811)和long(如150.769238)获取目标位置,如下所示。

"[^\\\\]"

并在下面的url字符串中传递这个lat long,你可以直接在字符串中传递这个lat,

CLLocation  *destinationLocation=[[CLLocation alloc] initWithLatitude:-34.059811 longitude:150.769238];

现在制作一个网址,

NSString* strLink = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=Current+Location&daddr=%f,%f",destinationLocation.latitude,destinationLocation.longitude];

在浏览器或 UIWebView 中打开此网址并使用计时器刷新该网页并查看魔术,路线将根据当前位置和目的地位置自动更新,您无需更新当前每次都有位置。

感谢。