Вход/Регистрация
iOS. Приемы программирования
вернуться

Нахавандипур Вандад

Шрифт:

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.

См. также

Разделы 9.4–9.6.

9.10. Отображение направлений на карте

Постановка задачи

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

Решение

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

Обсуждение

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

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

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

• Отправить информацию о направлениях в приложение Maps (Карты) для отображения.

В данном разделе мы исследуем второй вариант. Итак, предположим, что мы хотим показать направления проезда от той точки, в которой сейчас находимся, в другую произвольную точку на карте. В этом разделе мы задаем следующий адрес назначения: Churchill Square Shopping Center, Brighton, United Kingdom (Торговый центр «Черчилль», Брайтон, Соединенное королевство). С помощью технологии, изученной в разделе 9.7, мы сможем преобразовать обычный адрес, выразив его в координатах широты и долготы. Затем воспользуемся этой информацией для создания экземпляра класса MKPlacemark — подробнее об этом в дальнейшем.

Итак, начнем. Первым делом потребуется импортировать фреймворк Core Location, с помощью которого мы сможем преобразовать вышеупомянутый адрес в географические координаты (широту и долготу). Кроме того, импортируем фреймворк MapKit, с помощью которого сможем создать запрос направления. При помощи модулей, работу с которыми обеспечивает LLVM, мы без труда импортируем эти фреймворки в приложение:

#import «AppDelegate.h»

#import <CoreLocation/CoreLocation.h>

  • Читать дальше
  • 1
  • ...
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: