Размещение метки CLP на карте в iOS 5 - PullRequest
10 голосов
/ 27 ноября 2011

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

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

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

Ответы [ 3 ]

24 голосов
/ 28 ноября 2011

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

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];
                 }];
9 голосов
/ 27 ноября 2011

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 на любое значение из метки, но одна возможность, как показано в примере, состоит в том, чтобы использовать структуру пользовательского интерфейса адресной книги для генерации строки адреса из словаря адресов, предоставленного меткой.

0 голосов
/ 08 сентября 2017

в быстром 3.0

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