Ответ 1
Ниже ссылки содержит пример кода для отображения направлений в 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, если пользователь движется. 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];
Ниже ссылки содержит пример кода для отображения направлений в MKMapView, нам нужно только пропускать в нем значения широты и долготы.
У меня есть хорошее решение для выполнения такого рода работ.
Просто найдите место назначения, как показано ниже, с 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 и обновите эту страницу таймером и увидите волшебство, маршрут будет автоматически обновляться в соответствии с текущим местоположением и местом назначения, вам не нужно обновлять текущее местоположение каждый время.
Спасибо.