2012-12-13 27 views
5

Tôi mới tham gia lập trình Objective-C.Làm thế nào để có được kinh độ vĩ độ bằng cách sử dụng mã Zip/Mã bưu điện bằng cách sử dụng CLGeoCoder trong iOs?

Tôi muốn hiển thị vị trí trong MapView theo mã Zip/Mã bưu điện. Vì tôi phải tìm vĩ độ và kinh độ.

Tôi đã giới thiệu nhiều giải pháp bằng cách chuyển mã zip tới dịch vụ web và nhận phản hồi với tất cả thông tin.

Nhưng tôi không muốn sử dụng bất kỳ dịch vụ web nào. Tôi muốn làm điều đó bằng cách sử dụng CLGeocoder

Tôi đang sử dụng mã bên dưới để tìm kinh độ vĩ độ.

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

Mã này hoạt động nếu tôi chuyển Tên thành phố, Tên quốc gia hoặc Tên đường nhưng không hoạt động khi chuyển mã zip.

Xin cảm ơn trước.

Trả lời

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 { 

    } 
    }]; 

} 

xin vui lòng cho tôi biết nó đang làm việc hay không ...

Chúc mừng Mã hóa !!!

+0

Cảm ơn bạn đã trợ giúp ... nhưng tôi đã làm điều này .... –

+0

Cảm ơn NiravPatel. Điều này làm việc cho tôi. –

+0

Tôi đã cập nhật mã này trong [câu trả lời cho câu hỏi này] (http://stackoverflow.com/a/33460514/981049) và có thể tìm thấy vĩ độ/kinh độ trong từ điển/đối tượng dấu vị trí. –

Các vấn đề liên quan