標籤:ring 原創 rac ror tracking let param class 封裝
貓貓分享,必須精品
原創文章,歡迎轉載。轉載請註明:翟乃玉的部落格
地址:http://blog.csdn.net/u013357243
一:效果
輸入經緯度,能夠得到相應的地名
二:思路
跟地裡編碼差點兒相同
1.擷取使用者輸入的經緯度
2.依據使用者輸入的經緯度建立CLLocation對象
3.依據CLLocation對象擷取相應的地標資訊
三:代碼
#import "ViewController.h"#import <CoreLocation/CoreLocation.h>@interface ViewController ()/** * 地理編碼對象 */@property (nonatomic ,strong) CLGeocoder *geocoder;#pragma mark - 反地理編碼- (IBAction)reverseGeocode;@property (weak, nonatomic) IBOutlet UITextField *longtitudeField;@property (weak, nonatomic) IBOutlet UITextField *latitudeField;@property (weak, nonatomic) IBOutlet UILabel *reverseDetailAddressLabel;@end@implementation ViewController- (void)reverseGeocode{ // 1.擷取使用者輸入的經緯度 NSString *longtitude = self.longtitudeField.text; NSString *latitude = self.latitudeField.text; if (longtitude.length == 0 || longtitude == nil || latitude.length == 0 || latitude == nil) { NSLog(@"請輸入經緯度"); return; } // 2.依據使用者輸入的經緯度建立CLLocation對象 CLLocation *location = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longtitude doubleValue]]; // 3.依據CLLocation對象擷取相應的地標資訊 [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { for (CLPlacemark *placemark in placemarks) { NSLog(@"%@ %@ %f %f", placemark.name, placemark.addressDictionary, placemark.location.coordinate.latitude, placemark.location.coordinate.longitude); self.reverseDetailAddressLabel.text = placemark.locality; } }];}#pragma mark - 懶載入- (CLGeocoder *)geocoder{ if (!_geocoder) { _geocoder = [[CLGeocoder alloc] init]; } return _geocoder;}@end
四:知識擴充CLGeocoder
使用CLGeocoder能夠完畢“地理編碼”和“反地理編碼”
地理編碼:依據給定的地名。獲得詳細的位置資訊(比方經緯度、地址的全稱等)
反地理編碼:依據給定的經緯度,獲得詳細的位置資訊
->地理編碼方法
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
->反地理編碼方法
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
CLGeocodeCompletionHandler
當地理\反地理編碼完畢時,就會調用
CLGeocodeCompletionHandler typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);
這個block傳遞2個參數
error :當編碼出錯時(比方編碼不出詳細的資訊)有值
placemarks :裡面裝著CLPlacemark對象
CLPlacemark
CLPlacemark的字面意思是地標,封裝詳細的地址位置資訊
地理位置
@property (nonatomic, readonly) CLLocation *location;
地區
@property (nonatomic, readonly) CLRegion *region;
詳細的地址資訊
@property (nonatomic, readonly) NSDictionary *addressDictionary;
位址名稱
@property (nonatomic, readonly) NSString *name;
城市
@property (nonatomic, readonly) NSString *locality;
結構圖
貓貓學iOS 之CoreLocation反地理編碼小Demo輸入經緯度得到城市