如何在iOS中使用CLGeoCoder通过邮政编码获取纬度经度?

6

我是Objective-C编程的新手。

我想通过邮政编码在地图视图中显示位置。为此,我需要找到纬度和经度。

我已经参考了许多解决方案,通过将邮政编码传递给Web服务并获取所有信息的响应。

但我不想使用任何Web服务。我想使用CLGeocoder来完成。

我正在使用以下代码查找纬度和经度。

-(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";
        }
     }
  }];
}

如果我传递城市名称、国家名称或街道名称,此代码可以正常工作,但在传递邮政编码时无法正常工作。

提前致谢。

1个回答

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 {

   }
  }];

 }

请告诉我它是否正常工作......祝你编码愉快!

我已经在这个问题的答案中更新了这段代码,纬度/经度可以在返回的placemark字典/对象中找到。 - Michael Dautermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接