在iOS 5中将CLPlacemark放在地图上

时间:2011-11-27 03:49:38

标签: ios ios5 mkmapview mapkit

在iOS 5中,有一种转发地理编码地址的新方法(将地址转换为1 Infinite Loop,CA,USA转换为lat / lang地址)。 More info on this is here.

有人试图将前向地理编码的CLPlacemark对象放在MKMapView上吗?我在地理编码后有一个CLPlacemark对象,但不知道如何将它放在地图上。

我很感激任何类型的帮助。到目前为止谷歌没有任何帮助。

3 个答案:

答案 0 :(得分:24)

除了选定的答案外,还有一种方法可以为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];
                 }];

答案 1 :(得分:9)

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设置为您想要的地标,但是如示例所示,一种可能性是使用地址簿UI框架从地标提供的地址字典生成地址字符串

答案 2 :(得分:0)

在swift 3.0中

FileObserverEvents