2012-12-13 5 views
5

Ich bin neu in Objective-C-Programmierung.Wie bekomme ich den Breitengrad über Postleitzahl/Postleitzahl mit CLGeoCoder in iOs?

Ich möchte den Standort in MapView nach PLZ/Postleitzahl anzeigen. Dafür muss ich den Breiten- und Längengrad finden.

Ich hatte bereits viele Lösungen erwähnt, indem ich die Postleitzahl an den Web-Service übergab und eine Antwort mit allen Informationen erhielt.

Aber ich möchte keinen Web-Service verwenden. Ich will es tun, indem Sie CLGeocoder

ich Code unten bin mit Breitengrad Längengrad für die Suche.

-(IBAction)fetchCoordinates:(id)sender { 

    if (!self.geocoder) { 
    self.geocoder = [[CLGeocoder alloc] init]; 
    } 

    NSString *address = [NSString stringWithFormat:@"%@ %@ %@", self.streetField.text, self.cityField.text, self.countryField.text]; 

    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) { 
    NSLog(@"mark :: %@", placemarks); 
    if ([placemarks count] > 0) { 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
     CLLocation *location = placemark.location; 
     CLLocationCoordinate2D coordinate = location.coordinate; 

     self.coordinatesLabel.text = [NSString stringWithFormat:@"%f, %f", coordinate.latitude, coordinate.longitude]; 

     if ([placemark.areasOfInterest count] > 0) { 
      self.nameLabel.text = [placemark.areasOfInterest objectAtIndex:0]; 

     } else { 
      self.nameLabel.text = @"No Area of Interest Was Found"; 
     } 
    } 
    }]; 
} 

Dieser Code funktioniert, wenn ich vorbei Stadtnamen, Land Namen oder Straßennamen, aber nicht arbeiten, wenn Zip-Code übergeben.

Vielen Dank im Voraus.

Antwort

5
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
{ 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
[geocoder geocodeAddressString:theSearchBar.text completionHandler:^(NSArray *placemarks, NSError *error) { 
    //Error checking 

    CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
    MKCoordinateRegion region; 
    region.center.latitude = placemark.region.center.latitude; 
    region.center.longitude = placemark.region.center.longitude; 
    MKCoordinateSpan span; 
    double radius = placemark.region.radius/1000; // convert to km 

    //NSLog(@"Radius is %f", radius); 
    span.latitudeDelta = radius/112.0; 

    region.span = span; 
    mapView.showsUserLocation=TRUE; 
    mapView.delegate = self; 
    DisplayMap *ann = [[[DisplayMap alloc] init] autorelease]; 
    ann.title =theSearchBar.text; 
    ann.coordinate = region.center; 
    ann.takeid = 0; 
    [mapView addAnnotation:ann]; 



    [mapView setRegion:region animated:YES]; 
}]; 

[theSearchBar resignFirstResponder]; 

} 

-(void)GetCityName { 

CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease]; 

CLLocation *currentLocation = [[[CLLocation alloc] initWithLatitude:dblLatitude longitude:dblLongitude] autorelease]; 

[geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { 
    if ([placemarks count] > 0) { 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
     //addressString1 = [placemark locality]; 
     addressString1 = [placemark thoroughfare]; 
     addressString1 = [addressString1 stringByAppendingString:[NSString stringWithFormatAngry" %@",[placemark postalCode]]];//enter here your postal code... 

     //NSLog(@"Address is : %@",addressString1); 
     LblLocation.text = addressString1; 

    } 
    else { 

    } 
    }]; 

} 

lassen Sie es mich wissen, dass es funktioniert oder nicht ...

Glücklich Coding !!!

+0

Danke für Hilfe ... aber ich hatte das schon getan .... –

+0

Danke NiravPatel. Das funktioniert für mich. –

+0

Ich habe in [eine Antwort auf diese Frage] (http://stackoverflow.com/a/33460514/981049) ein Update für diesen Code vorgenommen, und Breiten-/Längengrad kann in dem zurückgegebenen Ortsmarkenwörterbuch/Objekt gefunden werden. –

Verwandte Themen