In iOS 5, there is a new way to forward geocode address (converting address like 1 Infinite Loop, CA, USA to lat/lang address). More info on this is here.
Has anybody t
A CLPlacemark
doesn't implement the MKAnnotation
protocol so you still have to create your own annotation class or you can use MKPointAnnotation
. The coordinates of the placemark are in its location
property.
For example:
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
You can set the title
to anything you want from the placemark but one possibility, as shown in the example, is to use the Address Book UI framework to generate an address string from the address dictionary provided by the placemark.
in swift 3.0
let pm = placemarks! as [CLPlacemark] // this is Clpmacemark
let placemark = MKPlacemark.init(placemark: pm)
self.mapview.addAnnotation(placemark)
In addition to the selected answer, there is also this way for adding annotations to the mapView for forward geocoding. The CLPlacemark object can be directly cast to MKPlacemark and added to the mapview. Like this:
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:placemark];
[self.mapView addAnnotation:placemark];
Here is a full example of forward geocoding.
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];
}];