Ввод CLPlacemark на карту в iOS 5

В iOS 5 существует новый способ перенаправления геокодированного адреса (преобразование адреса, такого как 1 Infinite Loop, CA, USA в адрес lat/lang). Подробнее об этом здесь.

Кто-нибудь пытался помещать объект геокодирования CLPlacemark в MKMapView? У меня есть объект CLPlacemark после геокодирования, но не знаю, как разместить его на карте.

Буду признателен за любую помощь. Google пока не помогает.

Ответ 1

В дополнение к выбранному ответу, есть также такой способ добавления аннотаций к mapView для прямого геокодирования. Объект CLPlacemark может быть непосредственно добавлен в MKPlacemark и добавлен в mapview. Вот так:

MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:placemark];
[self.mapView addAnnotation:placemark];

Вот полный пример прямого геокодирования.

 NSString *address = @"1 Infinite Loop, CA, USA";
 CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:address 
                 completionHandler:^(NSArray* placemarks, NSError* error){
                     // Check for returned placemarks
                     if (placemarks && placemarks.count > 0) {
                         CLPlacemark *topResult = [placemarks objectAtIndex:0];
                         // Create a MLPlacemark and add it to the map view
                         MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
                         [self.mapView addAnnotation:placemark];
                         [placemark release];
                     }
                     [geocoder release];
                 }];

Ответ 2

A CLPlacemark не реализует протокол MKAnnotation, поэтому вам все равно нужно создать свой собственный класс аннотаций, или вы можете использовать MKPointAnnotation. Координаты метки находятся в свойстве location.

Например:

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init];
pa.coordinate = placemark.location.coordinate;
pa.title = ABCreateStringWithAddressDictionary(placemark.addressDictionary, YES);
[mapView addAnnotation:pa];
[pa release];  //remove if using ARC

Вы можете установить title на все, что хотите, с метки, но одна из возможностей, как показано в примере, заключается в использовании структуры пользовательского интерфейса адресной книги для создания адресной строки из адресного словаря, предоставляемого меткой.

Ответ 3

в swift 3.0

 let pm = placemarks! as [CLPlacemark] // this is Clpmacemark
 let placemark = MKPlacemark.init(placemark: pm)
 self.mapview.addAnnotation(placemark)