码迷,mamicode.com
首页 > 其他好文 > 详细

地理编码和反地理编码

时间:2015-10-16 20:27:43      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

一、基本概念

  地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)

  反地理编码:根据给定的经纬度,获得具体的位置信息

  编码器CLGeocoder的每个实例,同时只能处理一个任务,异步执行。

二、基本方法

 1. 地理编码方法

     - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;

 2. 反地理编码方法

    - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

 3. 当地理\反地理编码完成时,就会调用CLGeocodeCompletionHandler   

   typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);

   这个block传递2个参数  error :当编码出错时(比如编码不出具体的信息)有值    placemarks :里面装着CLPlacemark对象

    CLPlacemark的字面意思是地标,封装详细的地址位置信息

 3.1 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;城市

三、地理编码与反地理编码实现

  1. 首先导入 <CoreLocation/CoreLocation.h>框架,然后导入#import <CoreLocation/CoreLocation.h>头文件

  2. 创建编码器对象,并进行懒加载

@property(nonatomic,strong) CLGeocoder *geocoder;

- (CLGeocoder *)geocoder{
    if (!_geocoder) {
        self.geocoder = [[CLGeocoder alloc] init];
    }
    return _geocoder;
}

  

  3. 编码方法实现

- (void)geocod{
    NSLog(@"ddddd");
    //1. 获得输入的地址
    NSString *address = _addressField.text;
    if (address.length == 0) return;
    
    //2.开始编码
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error || placemarks.count == 0) {
            _detailAddressLabel.text = @"您输入的地址找不到";
        } else{ //编码成功(找到了具体的位置信息)
            //输出找的所有地标信息
            for (CLPlacemark *placeM in placemarks) {
                NSLog(@"name:%@  locality:%@  country:%@  postalCode:%@",placeM.name, placeM.locality,placeM.country, placeM.postalCode);
            }
            
            //显示最前面的地标信息
            CLPlacemark *firstPlacemark = [placemarks firstObject];
            _detailAddressLabel.text = firstPlacemark.name;
            
            CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude;
            CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude;
            _latitudeLabel.text = [NSString stringWithFormat:@"%.2f",latitude];
            _longgitudeLable.text = [NSString stringWithFormat:@"%.2f",longitude];
        }
    }];
}

 

  4. 反地理编码实现

   NSString *longTitudeText = _longgitudeField.text;
    NSString *latitudeText = _latitudeField.text;
    if (longTitudeText.length == 0 || latitudeText.length == 0) return;
    
    CLLocationDegrees latitude = [latitudeText doubleValue];
    CLLocationDegrees longtitude = [longTitudeText doubleValue];
    
    //开始反向编码
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longtitude];
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error || placemarks.count == 0) {
            _reverseDetailAddressLabel.text = @"您输入的地址找不到";
        } else{
            for (CLPlacemark *placeM in placemarks) {
                NSLog(@"name:%@  locality:%@  country:%@  postalCode:%@",placeM.name, placeM.locality,placeM.country, placeM.postalCode);
            }
            
            CLPlacemark *firstPlacemark = [placemarks firstObject];
            _reverseDetailAddressLabel.text = firstPlacemark.name;
            
            CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude;
            CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude;
            self.latitudeField.text = [NSString stringWithFormat:@"%.2f", latitude];
            self.longgitudeField.text = [NSString stringWithFormat:@"%.2f", longitude];
        }
    }];

效果图:

技术分享

   

 

地理编码和反地理编码

标签:

原文地址:http://www.cnblogs.com/10-19-92/p/4886181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!