zoukankan      html  css  js  c++  java
  • [IOS地图开发系类]2、位置解码CLGeocoder

     

     接第一步的操作,获取到地址信息经纬度后,我们可以对其进行解码,解码采用的CLGeocoder这个类,使用方式如下: 

    1、在ViewControlelr.m文件中声明一个CLGeocoder的属性,给页面加一个button,然后在处理方法中,对上一篇获取的地址坐标进行解码,

    code如下

    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    #import <MapKit/MapKit.h>
    @interface ViewController ()<CLLocationManagerDelegate,MKMapViewDelegate>{
    }
    @property (nonatomic,retain)CLLocationManager* locationManager;
    @property (nonatomic,retain)CLLocation* location;
    @property (nonatomic, retain) CLGeocoder *myGeocoder;
    @end
     
    @implementation ViewController
     
    -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
            _locationManager = [[CLLocationManager alloc] init];
        }
        return  self;
    }
    - (void)dealloc
    {
        self.locationManager = nil;
        self.location = nil;
        self.myGeocoder = nil;
        [super dealloc];
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        //delegate
        self.locationManager.delegate = self;
        //The desired location accuracy. 
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        //Specifies the minimum update distance in meters.
        self.locationManager.distanceFilter = kCLDistanceFilterNone;
        self.locationManager.purpose =
        @"To provide functionality based on user's current location.";
        [self.locationManager startUpdatingLocation];
         
       UIButton *addBt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        addBt.frame = CGRectMake(0, 00, 320, 50);
        [addBt setTitle:@"locationMe" forState:UIControlStateNormal];
         
        [addBt addTarget:self action:@selector(handleLocationMe:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:addBt];
         
         self.myGeocoder = [[CLGeocoder alloc] init];
    }
     
     
    - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
    {
        NSLog(@"didChangeAuthorizationStatus---%u",status);
    }
     
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
        NSLog(@"didChangeAuthorizationStatus----%@",error);
    }
     
    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    {
         
        UIAlertView* av = [[UIAlertView alloc] initWithTitle:@"update" message:[NSString stringWithFormat:@"didUpdateToLocation:  newLocation: %@  old:%@",newLocation,oldLocation] delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil];
        [av show];
        [av release];
     
        self.location = newLocation;
         
       NSLog(@"didUpdateToLocation:  newLocation: %@",newLocation);
    }
     
     
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
     
     
    -(IBAction)handleLocationMe:(id)sender
    {
         
        [self.myGeocoder
         reverseGeocodeLocation:self.location completionHandler:^(NSArray *placemarks, NSError *error) {
             if (error == nil &&[placemarks count] > 0){
                 CLPlacemark *placemark = [placemarks objectAtIndex:0];
                 /* We received the results */
                 NSLog(@"Country = %@", placemark.country);
                 NSLog(@"Postal Code = %@", placemark.postalCode);
                 NSLog(@"Locality = %@", placemark.locality);
                 NSLog(@"dic = %@", placemark.addressDictionary );
                 NSLog(@"dic FormattedAddressLines= %@", [placemark.addressDictionary objectForKey:@"FormattedAddressLines"]);
                 NSLog(@"dic Name = %@", [placemark.addressDictionary objectForKey:@"Name"]);
                 NSLog(@"dic State = %@", [placemark.addressDictionary objectForKey:@"State"]);
                 NSLog(@"dic Street = %@", [placemark.addressDictionary objectForKey:@"Street"]);
                 NSLog(@"dic SubLocality= %@", [placemark.addressDictionary objectForKey:@"SubLocality"]);
                 NSLog(@"dic SubThoroughfare= %@", [placemark.addressDictionary objectForKey:@"SubThoroughfare"]);
                 NSLog(@"dic Thoroughfare = %@", [placemark.addressDictionary objectForKey:@"Thoroughfare"]);
        
                  
             }
             else if (error == nil &&
                      [placemarks count] == 0){
                 NSLog(@"No results were returned.");
             }
             else if (error != nil){
                 NSLog(@"An error occurred = %@", error);
             }
         }];
    }
    @end

    输出如下:

      

    2013-07-28 20:47:16.578 LBS_001_CLLocationManager[30123:907] didChangeAuthorizationStatus---3
    2013-07-28 20:47:17.288 LBS_001_CLLocationManager[30123:907] didUpdateToLocation:  newLocation: <+39.93751238,+116.34143052> +/- 65.00m (speed -1.00 mps / course -1.00) @ 13-7-28 中国标准时间下午8时47分16秒
    2013-07-28 20:47:17.300 LBS_001_CLLocationManager[30123:907] didUpdateToLocation:  newLocation: <+39.93751238,+116.34143052> +/- 65.00m (speed -1.00 mps / course -1.00) @ 13-7-28 中国标准时间下午8时47分16秒
    2013-07-28 20:47:17.351 LBS_001_CLLocationManager[30123:907] didUpdateToLocation:  newLocation: <+39.93770077,+116.34199932> +/- 70.88m (speed -1.00 mps / course -1.00) @ 13-7-28 中国标准时间下午8时47分16秒
    2013-07-28 20:47:17.392 LBS_001_CLLocationManager[30123:907] didUpdateToLocation:  newLocation: <+39.93767287,+116.34189085> +/- 65.00m (speed -1.00 mps / course -1.00) @ 13-7-28 中国标准时间下午8时47分17秒
    2013-07-28 20:47:51.976 LBS_001_CLLocationManager[30123:907] Country = 中国
    2013-07-28 20:47:51.977 LBS_001_CLLocationManager[30123:907] Postal Code = (null)
    2013-07-28 20:47:51.979 LBS_001_CLLocationManager[30123:907] Locality = (null)
    2013-07-28 20:47:51.980 LBS_001_CLLocationManager[30123:907] dic = {
        Country = "U4e2dU56fd";
        CountryCode = CN;
        FormattedAddressLines =     (
            "U4e2dU56fdU5317U4eacU5e02U897fU57ceU533aU5c55U89c8U8defU8857U9053U897fU76f4U95e8U5916U5927U8857132U53f7"
        );
        Name = "U4e2dU56fdU5317U4eacU5e02U897fU57ceU533aU5c55U89c8U8defU8857U9053U897fU76f4U95e8U5916U5927U8857132U53f7";
        State = "U5317U4eacU5e02";
        Street = "U897fU76f4U95e8U5916U5927U8857 132U53f7";
        SubLocality = "U897fU57ceU533a";
        SubThoroughfare = "132U53f7";
        Thoroughfare = "U897fU76f4U95e8U5916U5927U8857";
    }
    2013-07-28 20:47:51.982 LBS_001_CLLocationManager[30123:907] dic FormattedAddressLines= (
        "U4e2dU56fdU5317U4eacU5e02U897fU57ceU533aU5c55U89c8U8defU8857U9053U897fU76f4U95e8U5916U5927U8857132U53f7"
    )
    2013-07-28 20:47:51.983 LBS_001_CLLocationManager[30123:907] dic Name = 中国北京市西城区展览路街道西直门外大街132号
    2013-07-28 20:47:51.985 LBS_001_CLLocationManager[30123:907] dic State = 北京市
    2013-07-28 20:47:51.986 LBS_001_CLLocationManager[30123:907] dic Street = 西直门外大街 132号
    2013-07-28 20:47:51.987 LBS_001_CLLocationManager[30123:907] dic SubLocality= 西城区
    2013-07-28 20:47:51.988 LBS_001_CLLocationManager[30123:907] dic SubThoroughfare= 132号
    2013-07-28 20:47:51.989 LBS_001_CLLocationManager[30123:907] dic Thoroughfare = 西直门外大街
  • 相关阅读:
    POJ 2923 Relocation ★(状态压缩+01背包)
    POJ 1062 昂贵的聘礼 (带限制的最短路)
    HDU 4355 Party All the Time (三分求凸函数极值)
    POJ 1860 Currency Exchange (BellmanFord)
    POJ 2923 Relocation ★(状态压缩+01背包)
    【HNOI2011】数学作业(BZOJ 2326)
    POJ 1062 昂贵的聘礼 (带限制的最短路)
    作为当代大学生,面对着信息增长加快,老化周期变短,你应该如何做?
    作为当代大学生,面对着信息增长加快,老化周期变短,你应该如何做?
    信息分析与预测考前模拟试题
  • 原文地址:https://www.cnblogs.com/niit-soft-518/p/4202362.html
Copyright © 2011-2022 走看看