如何在 iOs 中使用 CLGeoCoder 使用邮政编码/邮政编码获取纬度经度?

Posted

技术标签:

【中文标题】如何在 iOs 中使用 CLGeoCoder 使用邮政编码/邮政编码获取纬度经度?【英文标题】:How to get latitude longitude using Zip code/ Postal Code using CLGeoCoder in iOs? 【发布时间】:2012-12-01 06:19:33 【问题描述】:

我是 Objective-C 编程的新手。

我想在 MapView 中按邮政编码/邮政编码显示位置。 为此,我必须找到纬度和经度。

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

但我不想使用任何网络服务。我想通过使用 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】:
-(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 

   
  ];

 

请告诉我它是否有效...

编码愉快!!!

【讨论】:

我已经对an answer to this question中的这段代码进行了更新,纬度/经度可以在地标字典/返回的对象中找到。

以上是关于如何在 iOs 中使用 CLGeoCoder 使用邮政编码/邮政编码获取纬度经度?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中使用 CLGeocoder 进行转发地理编码,为某些位置的位置返回 null

iOS - 没有互联网连接的 CLGeocoder

XCode 4.3 使用错误链接的 dylib 构建 iOS 应用程序(未找到符号:_OBJC_CLASS_$_CLGeocoder)

CLGeocoder 延迟直到完成处理程序

使用 CLGeocoder 反向地理编码查找当前位置

iOS CoreLocation CLGeocoder 提供不完整的英国邮政编码