今天给大家简单介绍一下iOS开发过程中会遇到的获取地理位置的问题,(话不多说进入正题)这里给大家讲解一下两种在APPdelegate获取地理位置的方法:

一:首先是用系统的方法获取地理位置:

1、 首先在AppDelegate.m导入

@import CoreLocation;

@import MapKit;

2、 声明协议:

<CLLocationManagerDelegate> //协议

3、声明属性:

@property(nonatomic) CLLocationManager *locationManager;

4、

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.locationManager = [[CLLocationManager alloc] init];

//判断异常

if (![CLLocationManager locationServicesEnabled]) {

NSLog(@"定位服务不可用!");

}

//定位精度

_locationManager.desiredAccuracy = kCLLocationAccuracyBest;

self.locationManager.delegate = self;

//启动定位

[_locationManager startUpdatingLocation];

....

return YES;

}

5、完成地图的代理方法:

#pragma mark -- CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager

didUpdateLocations:(NSArray<CLLocation *> *)locations {

static BOOL isLocation = NO;

//地理位置逆编码

[self veverseGeLocation:manager.location completion:^(BOOL sucess, id content) {

if (sucess) {

//这里打印一下数据,方便查看

NSLog(@"%@",content);

//NSString * provnice = content[@"State"];

//NSString * city = content[@"City"];

//NSString * district = content[@"SubLocality"];

if (isLocation == YES) {

return ;

}

//如果你其他界面需要用到该地理位置;则直接将NSString 内容保存下来,需要在取出来

isLocation = YES;

[self.locationManager stopUpdatingLocation];

}else{

}

}];

//停止定位

[manager stopUpdatingLocation];

}

//地理位置逆编码:把经纬度信息编码成格式化的地理位置信息

- (void)veverseGeLocation:(CLLocation *)location completion:(void(^)(BOOL sucess, id content)) completion{

CLGeocoder *coder = [[CLGeocoder alloc]init];

//逆编码方法,后台线程执行

[coder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

BOOL sucess;

id content = nil ;

if (error) {

sucess = NO;

content = error.localizedDescription;

}

else{

sucess = YES;

CLPlacemark *placeMark = placemarks.firstObject;

content = placeMark.addressDictionary;

}

completion(sucess,content);

}];

}

二:首先是用高德的方法获取地理位置:用高德地图的话首先需要添加开发地图需要用到的库:对于库的导入依据开发人员的实际需求而定进行cocoapods导入或者手动拖入,前面流程基本都是跟随高德地图api 进行的,再次就不多重复介绍,详情各位可自行前往学习(链接:http://lbs.amap.com/api/ios-sdk/guide/create-project,下面就APPdelegate的内容进行讲解:

1、导入对应的头文件:

#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapLocationKit/AMapLocationKit.h>

2、添加协议:

<AMapLocationManagerDelegate> //协议

3、声明属性:

@property (nonatomic,strong)AMapLocationManager * locationManager;

4、

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[AMapServices sharedServices].apiKey = @"您的key";

[[AMapServices sharedServices] setEnableHTTPS:YES];

//创建地图manager

self.locationManager = [[AMapLocationManager alloc] init];//实例化位置管理器

[self.locationManager setDelegate:self];

[self.locationManager startUpdatingLocation];//启动定位

[self.locationManager setPausesLocationUpdatesAutomatically:NO];

[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];//定位精度

self.locationManager.locatingWithReGeocode = YES;//连续定位是否返回逆地理信息,默认NO。

return YES;

}

5、代理方法:

#pragma mark - AMapLocationManager Delegate

- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode

{

NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);

static BOOL isLocation = NO;

if (reGeocode != nil && isLocation == NO) {

//  NSString * provnice = reGeocode.province;

//  NSString * city = reGeocode.city;

//  NSString * district = reGeocode.district;

//  NSString *codeStr = reGeocode.adcode;//地理adcode

//如果你其他界面需要用到该地理位置;则直接将NSString 内容保存下来,需要在取出来

isLocation = YES;

}

}

以上就是两者获取地理位置的方法,需要说明的是:如果开发项目中后面会用到地理位置的adcode的时候,本人建议用第二种方法,因为第一种目前不能获取到该adcode,或者本人技术不到位还没有找到解决的办法,望各位大神多多谅解和给出指导意见,谢谢!

关于iOS开发首次进入需要获取地理位置的更多相关文章

  1. iOS开发之网络编程--获取文件的MIMEType

    前言:有时候我们需要获取文件的MIMEType的信息,下面就介绍关于获取MIMEType的方法. 1.直接百度搜索关键字"MIMEType",你会找到,然后查吧: 2.用代码获取文 ...

  2. 【iOS开发-从网络上获取图片尺寸】

    实际开发过程中,容易碰到从网络上获取图片尺寸的场景,比如一个UIImageView要装载从网络上获取的图片,但要先设置其frame,此时又不知道图片尺寸,就要从网络上获取尺寸了.为了最好的用户体验,一 ...

  3. iOS开发 首次启动显示用户引导,第二次启动直接进入App,UIScrollView,UIPageControl,NSUserDefaults

    首先创建一个引导图的控制器类 UserGuideViewController.h和UserGuideViewController.m #import <UIKit/UIKit.h> #im ...

  4. ios开发之-- tableview/collectionview获取当前点击的cell

    方法如下: 一般collectionView 或者 tableview都有自带的点击函数,如下: , collectionView -(void)collectionView:(UICollectio ...

  5. IOS开发代码分享之获取启动画面图片的string

    http://www.jb51.net/article/55309.htm 本代码支持 iPhone 6 以下. 支持 iPhone 及 iPad ? 1 2 3 4 5 6 7 8 9 10 11 ...

  6. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  7. iOS 开发获取唯一标识

    在做流量精灵的时候有这样一个需求,帐户默认需要取手机的imsi 信息.这就有一个好处,即便用户删除我们的应用后从新下载,下次进入时他们还会以同样的身份登陆,并且获得原先纪录.这样不仅对于开发公司人员来 ...

  8. iOS开发中获取WiFi相关信息

    iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...

  9. iOS开发——运行时OC篇&使用运行时获取系统的属性:使用自己的手势修改系统自带的手势

    使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛 ...

随机推荐

  1. C#集合的应用以及和数组比较,它的好处有哪些

    我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类.我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和 ...

  2. golang中的reflect包用法

    最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...

  3. canvas随笔

    公司刚刚处于创业初期,总是会尝试着做一些新奇的东西.尤其是对于网上一些好玩的东西,总是希望自己也能有一样的功能.不得不说,对于我来说,既是种机遇,也是种挑战.因为这样给了我足够的发展空间,可以按着自己 ...

  4. 多线程爬坑之路-ThreadLocal源码及原理的深入分析

    ThreadLocal<T>类:以空间换时间提供一种多线程更快捷访问变量的方式.这种方式不存在竞争,所以也不存在并发的安全性问题. This class provides thread-l ...

  5. Python自动化开发(三):循环次数控制、常用数据类型、字符串格式化、列表常用操作、列表的后续操作

    计数器的作用可以在死循环中,符合条件的情况下做自动退出中断 #!/usr/bin/env python # _*_ coding: utf-8 _*_ # @Time : 2017/3/14 11:2 ...

  6. Java synchronized 关键字的实现原理

    数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现sy ...

  7. C# 使用Process调用外部程序中所遇到的参数问题

    在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载: // // 摘要: // 启动由包含进程启动信息(例如,要启动的进程 ...

  8. ZJOI2017 Day3 滚粗记

    私のZJOI Day3 2017-3-21 07:52:53 今天,考了人生当中的第一次省选(虽然只是普及组三等奖但仍然有幸能体会一下).据胡老师说,这就是来体验一下被大神虐--真的是这样,听课听不懂 ...

  9. 对于反射中的invoke()方法的理解

    先讲一下java中的反射: 反射就是将类别的各个组成部分进行剖析,可以得到每个组成部分,就可以对每一部分进行操作 在比较复杂的程序或框架中来使用反射技术,可以简化代码提高程序的复用性. 讲的是Meth ...

  10. Power BI Embedded 与 Bot Framework 结合的AI解决方案

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...