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

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

Шрифт:

В данном коде отображаем картинку под названием BluePin.png (в пакете нашего приложения) для любого маркера, который ставится на карте. Определение реализации класса MyAnnotation приводится в разделе 9.5.

Обсуждение

Объект делегата, относящийся к классу MKMapView, должен соответствовать протоколу MKMapViewDelegate и реализовывать метод mapView: viewForAnnotation:. Возвращаемое значение этого метода является экземпляром класса MKAnnotationView. Любой объект, являющийся подклассом вышеупомянутого класса, по умолчанию наследует свойство image. Если присвоить этому свойству такое значение, то мы заменим стандартное значение, предоставляемое во фреймворке Map Kit. Результат показан на рис. 9.4.

Рис. 9.4. Наше собственное изображение, показанное в картографическом виде

См. также

Раздел 9.5.

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

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

Имеется адрес определенного места, необходимо найти его географические координаты (широту и долготу).

Решение

Воспользуйтесь методом 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

  • Читать дальше
  • 1
  • ...
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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