美文网首页
二、iOS集成高德定位SDK

二、iOS集成高德定位SDK

作者: 回声2016 | 来源:发表于2017-03-12 23:34 被阅读0次

    APIkey申请略过,代码参考官方demo

    1. AMapUtil.h
      定义AMapUtil 接口,reGeocodeAction为外部的实例方法
    #import <AMapLocationKit/AMapLocationKit.h>
    @interface AMapUtil : NSObject
    @property (nonatomic, strong) AMapLocationManager *locationManager;
    -(void)reGeocodeAction;
    @end
    
    1. AMapUtil.m
      AMapUtil接口实现,本demo只调用 进行单次带逆地理定位请求
    #import <Foundation/Foundation.h>
    #import "AMapUtil.h"
    #define DefaultLocationTimeout 10
    #define DefaultReGeocodeTimeout 5
    @interface AMapUtil () <AMapLocationManagerDelegate>
    @property (nonatomic, copy) AMapLocatingCompletionBlock completionBlock;
    @end
    @implementation AMapUtil
    #pragma mark - Action Handle
    -(void)configLocationManager
    {
        self.locationManager = [[AMapLocationManager alloc] init];
        [self.locationManager setDelegate:self];
        //设置期望定位精度
        [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];    
        //设置不允许系统暂停定位
        [self.locationManager setPausesLocationUpdatesAutomatically:NO];    
        //设置允许在后台定位
        [self.locationManager setAllowsBackgroundLocationUpdates:YES];
        //设置定位超时时间
        [self.locationManager setLocationTimeout:DefaultLocationTimeout];    
        //设置逆地理超时时间
        [self.locationManager setReGeocodeTimeout:DefaultReGeocodeTimeout];
    }
    -(void)cleanUpAction
    {
        //停止定位
        [self.locationManager stopUpdatingLocation];    
        [self.locationManager setDelegate:nil];    
    }
    -(void)reGeocodeAction
    {
        [self initCompleteBlock];
        [self configLocationManager];   
        //进行单次带逆地理定位请求
        [self.locationManager requestLocationWithReGeocode:YES completionBlock:self.completionBlock];
    }
    -(void)locAction
    {
        //进行单次定位请求
        [self.locationManager requestLocationWithReGeocode:NO completionBlock:self.completionBlock];
    }
    
    #pragma mark - Initialization
    -(void)initCompleteBlock
    {
        self.completionBlock = ^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error)
        {
            if (error)
            {
                NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);            
                //如果为定位失败的error,则不进行后续操作
                if (error.code == AMapLocationErrorLocateFailed)
                {
                    return;
                }
            }        
            //得到定位信息
            if (location)
            {
                NSLog(@"%@",location);
                NSLog(@"%@",regeocode);            
                if (regeocode)
                {
                    NSLog(@"%@ \n %@-%@-%.2fm", regeocode.formattedAddress,regeocode.citycode, regeocode.adcode, location.horizontalAccuracy);
                }
                else
                {
                    NSLog(@"lat:%f;lon:%f \n accuracy:%.2fm", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
                }
            }
        };
    }
    #pragma mark - Life Cycle
    -(void)dealloc
    {
        [super dealloc];
        [self cleanUpAction];
        
        self.completionBlock = nil;
    }
    @end
    
    1. 项目结构


    2. 调用
      在AppDelegate.m设置APIKey,申请的APIKey在APIKey.h

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [AMapServices sharedServices].apiKey = (NSString *)APIKey;
    }
    

    在方法中调用

    AMapUtil *amapUtil = [[AMapUtil alloc] init];
        [amapUtil reGeocodeAction ];
    

    相关文章

      网友评论

          本文标题:二、iOS集成高德定位SDK

          本文链接:https://www.haomeiwen.com/subject/wtgxnttx.html