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

项目开发--------地图与定位功能

时间:2015-10-21 20:39:14      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

一.定位.

    1.定位功能 : 定位是一个很常用的功能,如一些地图软件打开之后如果用户允许软件定位的话,那么打开软件后就会自动锁定到当前位置,如果用户手机移动那么当前位置也会跟随着变化。要实现这个功能需要使用Core Loaction中CLLocationManager类.

 

相关方法:(在前面的方法和属性属于较为常用和重要的)

技术分享

技术分享

 技术分享

 

示例代码:

 

//地理定位-----------------------------------------------
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //创建定位管理对象
    self.loactionMag  = [[CLLocationManager alloc] init];
    
    //CLLocationManager通过代理来实现
    //开始定位
    self.loactionMag.delegate = self;
    

    
    //向系统申请定位权限 定位服务授权状态 返回值为枚举值
    //总是开启定位权限功能
    [_loactionMag requestAlwaysAuthorization];
    
     //当使用次应用中允许访问定位服务
//    [_loactionMag requestWhenInUseAuthorization];
    
    //开始更新位置
        [_loactionMag startUpdatingLocation];   

}

#pragma mark ---实现相应的代理方法
//位置发生变化后执行(第一次定位到某个位置直管厚也会执行)
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations
{
    //打印经纬度
    CLLocation *location = locations[0];

    NSLog(@"纬度----%f,经度---+%f",location.coordinate.latitude ,location.coordinate.longitude);
    //为了省电,定位完毕关闭
    //如果不需要实时定位,使用及时使关闭定位服务
    [_loactionMag stopUpdatingLocation];
    
}

 

   2.地理(反)编码

    除了提供位置跟踪功能之外,在定位服务中还包含CLGeocoder类用于处理地理编码和逆地理编码(又叫反地理编码)功能。

   地理编码:根据给定的位置(通常是地名)确定地理坐标(经、纬度)。

   逆地理编码:可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等)。

CLGeocoder最主要的两个方法就是

  - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;  (分别用于地理编码)

  - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;,(分别用于反地理编码)

 

 示例代码:

 

//地理(反)编码----------------------------------------------------

#pragma mark ---地理编码  即根据地名确定地理坐标
- (IBAction)geoCode:(UIButton *)sender {
    
    //进行地理编码的代理方法
    [self.geocoder geocodeAddressString:self.adddressField.text completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error) {
            self.detailAddressLabel.text = @"查找地点不存在";
            
        } else{
           
            //打印出CLPlacemark中的内容
//            CLPlacemark *pl = placemarks[0];
//            NSDictionary *dic = pl.addressDictionary;
//            NSLog(@"%@",dic[@"city"]);
            //CLPlacemark 这个数组中存放的是CLPlacemark对象(位置对象,属性 ,name)
            
            CLPlacemark *place = placemarks[0];
            
            //设置地理纬度位置
            self.latitude.text  = [NSString stringWithFormat:@"%lf",place.location.coordinate.latitude];
            //设置地理经度位置
             self.longtitude.text  = [NSString stringWithFormat:@"%lf",place.location.coordinate.longitude];

            //设置地址详情
           self.detailAddressLabel.text = place.name;
            
        }
        
    }];
    
   
    
}


#pragma mark ---地理反编码   即根据坐标取得地名
- (IBAction)reverseGeocode:(UIButton *)sender {
    
    
      //反地理编码
    //创建一个<#(CLLocation *)#>对象
    //输入的纬度
    CLLocationDegrees latitude = [self.latitudeTextField.text doubleValue];
    //输入的经度
    CLLocationDegrees longtitude = [self.longtitudeTextField.text doubleValue];
    //获取输入的经纬度地理位置
    CLLocation *loc  = [[CLLocation alloc] initWithLatitude:latitude longitude:longtitude];
    //用代理方法进行地理反编码
    [self.geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error) {
            
            self.reverseDetailAddressLable.text = @"未获取到指定位置";
        }else{
          //取出数组中第一个对象
            CLPlacemark *placem = placemarks[0];
            //设置详细地址
            self.reverseDetailAddressLable.text = placem.name;
        
        
        }
        
    }];

 

 

二.地图

 

项目开发--------地图与定位功能

标签:

原文地址:http://www.cnblogs.com/erdeng/p/4898870.html

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