Подтвердить что ты не робот

Отображение MKRoute на MKMapView в iOS7

Я использую 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, если пользователь движется. Atm Я использую

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

чтобы распознать движение, и в этом методе я удаляю наложение MKRoute и вычисляю и добавляю новое с новым местоположением пользователя. Мне интересно, есть ли способ вычислить маршрут только один раз и обновить оверлей программно?

Edit: Я нашел этот https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep в Apples Dev Docs. Думаю, мне нужно сделать что-то вроде

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];
4b9b3361

Ответ 1

Ниже ссылки содержит пример кода для отображения направлений в MKMapView, нам нужно только пропускать в нем значения широты и долготы.

https://github.com/kadirpekel/MapWithRoutes

Ответ 2

У меня есть хорошее решение для выполнения такого рода работ.

Просто найдите место назначения, как показано ниже, с lat (например, -34.059811) и длиной (например, 150.769238).

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

и пропустите этот lat long в строке ниже url, вы можете передать этот длинный длинный строки в строке,

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

Теперь сделайте url,

NSURL *url = [NSURL URLWithString: [strLink stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

Откройте этот URL-адрес в браузере или UIWebView и обновите эту страницу таймером и увидите волшебство, маршрут будет автоматически обновляться в соответствии с текущим местоположением и местом назначения, вам не нужно обновлять текущее местоположение каждый время.

Спасибо.