otherButtonTitles: nil];

[alertView show];

}

Элементарно. Переходим к методу mapView: didUpdateUserLocation::

— (void) mapView:(MKMapView *)mapView

didUpdateUserLocation:(MKUserLocation *)userLocation{

MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];

request.naturalLanguageQuery = @"restaurants";

MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);

request.region =

MKCoordinateRegionMake(userLocation.location.coordinate, span);

MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest: request];

[search startWithCompletionHandler:

^(MKLocalSearchResponse *response, NSError *error) {

for (MKMapItem *item in response.mapItems){

NSLog(@"Item name = %@", item.name);

NSLog(@"Item phone number = %@", item.phoneNumber);

NSLog(@"Item url = %@", item.url);

NSLog(@"Item location = %@", item.placemark.location);

}

}];

}

В этом методе все просто. Мы создаем локальный поисковый запрос и устанавливаем в качестве значения его свойства naturalLanguageQuery те элементы, которые мы хотим найти на карте, — в данном случае рестораны. Затем получаем местоположение пользователя и создаем на его основе регион типа MKCoordinateRegion. Мы делаем это потому, что хотим определить область, окружающую пользователя, и выполнить поиск в этой области. Область сообщает движку поиска местоположения о том, что мы хотим ограничить круг поиска заданным регионом. Как только регион создан, задаем его в качестве значения свойства region для локального поиска. Сделав это, можно приступать к поиску. Для этого мы отправляем локальный поисковый запрос методу экземпляра startWithCompletionHandler:, относящемуся к классу MKLocalSearch. Этот метод принимает блок в качестве параметра. Данный блок кода вызывается при поступлении результатов поиска или возникновении ошибки.

Найденные элементы будут записаны в свойстве mapItems параметра отклика нашего блокового объекта, эти картографические элементы будут относиться к типу MKMapItem. У каждого элемента будут свойства — в частности, name, phoneNumber и url — которые помогут нанести на карту интересующие нас точки. При этом мы воспользуемся приемами, изученными ранее в этой главе, — например, отобразим на карте маркеры, о которых говорили в разделе 9.4.

<p>См. также</p>

Разделы 9.4–9.6.

<p>9.10. Отображение направлений на карте</p><p>Постановка задачи</p>

Необходимо отображать на карте направления, подсказывая таким образом пользователю, как попасть из точки А в точку B.

<p>Решение</p>

Инстанцируйте объект типа MKDirections и вызовите метод экземпляра calculateDirectionsWithCompletionHandler:, относящийся к этому объекту. Так будет вызван обработчик завершения, а вам будет передан объект типа MKDirectionsResponse. Воспользуйтесь таким откликом с информацией о направлениях, чтобы открыть на устройстве приложение Maps (Карты). Этому мы также вскоре научимся.

<p>Обсуждение</p>

Вы можете отображать на экране направления, подсказывающие пользователю, как пройти или проехать куда-либо. Но такая возможность доступна только в приложении Maps (Карты). Соответственно, вы не сможете наносить такие линии на карту прямо в картографическом виде внутри приложения. Способ указания направлений на карте в приложении Maps очень прост. Чтобы создать на экране такие линии, потребуется инстанцировать экземпляр класса MKDirections. Для работы с этим классом нужен уже готовый экземпляр MKDirectionsRequest.

Кроме того, для создания запроса на отображение направлений потребуется создать экземпляры MKMapItem. Каждый из таких элементов будет соответствовать точке на карте. Суть такова: если вы хотите отобразить на карте направления, помогающие пользователю найти путь из точки A в точку B, то эти точки потребуется представить в виде элементов карты. На базе информации об этих элементах создается запрос, а затем для получения направлений используется класс MKDirections. После получения направлений можно поступить двумя способами.

• Обработать направления самостоятельно. Например, с помощью одной из техник, изученных ранее в этой главе (см. раздел 9.4), вы можете получить все автозаправки (их метки), расположенные по пути из точки A в точку B, а затем снабдить эти точки на карте маркерами.

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги