Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

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

Шрифт:

Решение

Воспользуйтесь методом geocodeAddressString: completionHandler: из класса CLGeocoder.

Обсуждение

Обратное геокодирование (Reverse Geocoding) — это процесс получения обычного адреса (то есть страны, города и т. д.) на базе известного пространственного расположения (координат широты и долготы). В свою очередь, геокодирование — это процесс нахождения пространственного расположения в сетке координат на основе известного адреса. Функции геокодирования и обратного геокодирования заключены в классе CLGeocoder фреймворка Core Location.

Пространственное местоположение геокодируется путем передачи адреса в формате NSString методу geocodeAddressString: completionHandler:, относящемуся к классу CLGeocoder. Параметр completionHandler этого метода принимает блоковый объект, не возвращающий никакого значения и имеющий два параметра:

• массив меток (типа NSArray). Метками будут обозначены те точки на карте, которые соответствуют критериям поискового запроса;

• ошибку (типа NSError), которая будет преобразована в код ошибки, если геокодирование не удастся.

Итак, сначала объявим свойство типа CLGeocoder:

#import «ViewController.h»

#import <CoreLocation/CoreLocation.h>

@interface ViewController 

@property (nonatomic, strong) CLGeocoder *myGeocoder;

@end

@implementation ViewController

Идем дальше. Реализуем код для геокодирования адреса:

— (void)viewDidLoad{

[super viewDidLoad];

/* У нас есть адрес. */

NSString *oreillyAddress =

@"1005 Gravenstein Highway North, Sebastopol, CA 95472, USA";

self.myGeocoder = [[CLGeocoder alloc] init];

[self.myGeocoder

geocodeAddressString: oreillyAddress

completionHandler: ^(NSArray *placemarks, NSError *error) {

if ([placemarks count] > 0 &&

error == nil){

NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);

CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];

NSLog(@"Longitude = %f",

firstPlacemark.location.coordinate.longitude);

NSLog(@"Latitude = %f", firstPlacemark.location.coordinate.latitude);

}

else if ([placemarks count] == 0 &&

error == nil){

NSLog(@"Found no placemarks.");

}

else if (error!= nil){

NSLog(@"An error occurred = %@", error);

}

}];

}

Как только программа будет запущена (даже в симуляторе), в окне консоли появятся следующие значения (при наличии активного сетевого соединения):

Found 1 placemark(s).

Longitude = -122.8 41135

Latitude = 38.4 10373

См. также

Раздел 9.8.

9.8. Преобразование данных широты и долготы в обычные адреса

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

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

Решение

Получение обычного адреса на основании известных пространственных координат (x и y) называется обратным геокодированием. Для выполнения такой операции нужно создать и использовать экземпляр класса CLGeocoder, а также предоставить блоковый объект завершения. При этом необходимо гарантировать, что блоковый объект не имеет возвращаемого значения и принимает два параметра:

• массив меток (типа NSArray). Метками будут обозначены те точки на карте, которые соответствуют критериям поискового запроса;

• ошибку (типа NSError), которая будет преобразована в код ошибки, если обратное геокодирование не удастся.

Инстанцировав объект типа CLGeocoder, мы используем его метод reverseGeocodeLocation: completionHandler: для выполнения обратного геокодирования.

Верхняя часть. m-файла простого контроллера вида, применяемого для этой цели, определяется следующим образом:

#import «ViewController.h»

#import <CoreLocation/CoreLocation.h>

@interface ViewController 

@property (nonatomic, strong) CLGeocoder *myGeocoder;

@end

@implementation ViewController

В ходе загрузки вида можно выполнить обратное геокодирование:

— (void)viewDidLoad{

[super viewDidLoad];

CLLocation *location = [[CLLocation alloc]

initWithLatitude:+38.41 12810

longitude:-122.8409780f];

self.myGeocoder = [[CLGeocoder alloc] init];

[self.myGeocoder

reverseGeocodeLocation: location

completionHandler: ^(NSArray *placemarks, NSError *error) {

if (error == nil && placemarks.count > 0){

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

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Дважды одаренный. Том VI

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

Личный аптекарь императора. Том 3

Карелин Сергей Витальевич
3. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора. Том 3

Последний Герой. Том 4

Дамиров Рафаэль
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 4

Неудержимый. Книга XXVII

Боярский Андрей
27. Неудержимый
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVII

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Неудержимый. Книга XIX

Боярский Андрей
19. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIX

Отморозок 2

Поповский Андрей Владимирович
2. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 2