貓貓學iOS 之CoreLocation反地理編碼小Demo輸入經緯度得到城市

來源:互聯網
上載者:User

標籤: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輸入經緯度得到城市

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.