Нахавандипур Вандад
Шрифт:
См. также
Раздел 9.8.
9.8. Преобразование данных широты и долготы в обычные адреса
Постановка задачи
Имеются значения широты и долготы определенной точки в пространстве. Необходимо получить ее адрес.
Решение
Получение обычного адреса на основании известных пространственных координат (x и y) называется обратным геокодированием. Для выполнения такой операции нужно создать и использовать экземпляр класса CLGeocoder, а также предоставить блоковый объект завершения. При этом необходимо гарантировать, что блоковый объект не имеет возвращаемого значения и принимает два параметра:
• массив меток (типа NSArray). Метками будут обозначены те точки на карте, которые соответствуют критериям поискового запроса;
• ошибку (типа NSError), которая будет преобразована в код ошибки, если обратное геокодирование не удастся.
Инстанцировав объект типа CLGeocoder, мы используем его метод reverseGeocodeLocation: completionHandler: для выполнения обратного геокодирования.
Верхняя часть. m-файла простого контроллера вида, применяемого для этой цели, определяется следующим образом:
В ходе загрузки вида можно выполнить обратное геокодирование:
Если операция завершится успешно, то в массиве placemarks будут содержаться объекты типа CLPlacemark. Эти объекты будут отмечать адреса, удовлетворяющие значениям широты и долготы, которые мы сообщили методу reverseGeocodeLocation: completionHandler:. Итак, все, что от нас требуется, — убедиться в отсутствии ошибок и в том, что в массиве меток есть как минимум одна метка.
Методы NSLog из приведенного ранее кода выводят в окне консоли адрес, прошедший процедуру обратного геокодирования:
Обсуждение
В каждом приложении имеется лимит объема запросов на обратное геокодирование, которые могут быть выполнены в данном приложении за один день. Этот объем определяется провайдером серверного приложения, обеспечивающего поддержку геолокационных служб в iOS. Существуют различные платные онлайновые сервисы, которые предоставляют разработчикам сторонние API. Я не могу сейчас рекламировать какие-либо из подобных сервисов, но можете сами поискать их в Интернете, если захотите преодолеть ограничения, связанные с обратным геокодированием пространственных координат, существующие в настоящее время в iOS SDK. Чтобы выполнить запрос на обратное геокодирование, нужно создать экземпляр класса CLGeocoder. Этот класс требует активного сетевого соединения — оно необходимо для успешной обработки запросов. Значения, прошедшие обратное геокодирование, сообщаются блоку обработки завершения, который передается методу reverseGeocodeLocation: completionHandler:.
См. также
Раздел 9.7.
9.9. Поиск в картографическом виде
Постановка задачи
Требуется предоставить пользователям, просматривающим картографический вид, поисковую функцию. Например, можно помочь им найти все рестораны или тренажерные залы в конкретном регионе, отображенном на карте. Если пользователь находится в центре города и видит свое местоположение на карте, он может просто ввести в строку поиска слово «рестораны» — и приложение выполнит поиск по такому запросу.