地图与定位
Posted 萧家大公子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了地图与定位相关的知识,希望对你有一定的参考价值。
一 地图和定位的简介
1 主要应用场景:
—-> 1.1 周边:找餐馆、找KTV、找电影院等等(大众点评, 美团网)
—-> 1.2 导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达(百度地图, 高德地图)
二 实现该功能的必要条件
1. 在ios开发中,要想加入定位和地图两大功能,必须基于2个框架进行开发
—-> 1.1 CoreLocation(该篇着重介绍)
—-> 1.2 MapKit (下篇做介绍)
三 框架的讲解思路
1 地理定位 : 定位用户所在的位置, 获取对应的经纬度或者海拔等信息
2 地理编码 :
—-> 2.1 地理编码 : 南昌市青山湖区顺外路—–>113.381048 , 23.138369(数字是随便写的) : 地理编码
—-> 2.2 反地理编码 : 113.381048 , 23.138369(数字是随便写的)—-> 南昌市青山湖区顺外路 : 反地理编码
3 区域监听 : 事先在APP内部通过代码,指定一个区域, 那么当用户进入或离开区域的时候, 我们都可以监听到.
四 该部分需要知道的专业术语
1 LBS(Location Based Service) : 基于位置的服务
2 SoLoMo :Social Local Mobile(索罗门):
—-> 2.1 社交化 :在APP里面加入一些社交元素
—-> 2.1 本地化 : 基于LBS的周边搜索, 周边签到等服务
—-> 2.3 移动化 :1>移动网 : 3G/4G网, 相对于有线/无线电脑网络 2>移动app : 相对于”桌面应用”
五 iOS8.0之前的定位(了解即可)
1 只需要了解的原因 :
—-> 1.1 iOS8.0之前的版本慢慢即将被淘汰, 不再做适配
—-> 1.2 只要iOS8.0以后的定位功能实现, 那么直接把代码跑到iOS8.0之前的设备上, 依然是可以运行的, 不需要做任何修改
—-> 1.3 因为系统版本和XCode版本原因, 暂时没法安装iOS8.0之前的模拟器进行测试
2 前台定位
—-> 2.1 包含头文件 import CoreLocation
—-> 2.2 创建位置管理者并且设置代理
//懒加载位置管理者
private lazy var location : CLLocationManager =
//创建位子管理者
let location = CLLocationManager()
//设置代理
location.delegate = self
//返回位置管理者
return location
()
—-> 2.3 开始定位 : (这里设计点击屏幕就开始定位)
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
//开始定位
location.startUpdatingLocation()
—-> 2.4 采用代理方法实现定位
extension ViewController : CLLocationManagerDelegate
//当获取到用户的位置信息的时候会调用这个方法
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print("定位到了")
//如果只想获取一次用户位置,可以在获取到位置信息之后,停止获取
manager.stopUpdatingLocation()
3 startUpdatingLocation的注意点
—-> 3.1 如果想要使用位置管理者来开始实现某一个功能:start
—-> 3.2 如果想停止这个功能 : stop
—-> 3.3 一旦调用了这个方法,就会不断的获取用户的位置信息
—-> 3.4 在ios6.0之后,如果想要获取用户的隐私(照片,通信),系统会主动弹框让用户授权
—-> 3.5 一旦用户选择了don’t allow 意味着再也无法获取用户的位置信息.除非用户到设置界面设置允许你的app来获取我的位置
—-> 3.6 为了提高用户点击允许的几率,一般是在plist里面配置一个key,并且写上一个为何获取这个位置的段子Privacy - Location Usage Description
4 后台定位
—-> 4.1 基于ios8.0之前的前台定位前提下,我们只需要做一下设置中的一种就可以
—-> 4.2 配置Xcode后台设置
—-> 4.3 在info.plist文件中配置
5 iOS8.0之前的后台定位常见错误
—-> 5.1 定位不到, 对应的代理方法不执行
———> 5.1.1 检查运行的模拟器是否是iOS8.0之前的系统版本
———> 5.1.2 检查模拟器是否设置位置数据
———> 5.1.3 确保代码无问题(一般都是代理没有设置,或者位置管理器对象是局部变量)
———> 5.1.4 可能是模拟器BUG, 请将模拟器位置设为None,然后再次设置数据; 或者,重置模拟器
六 ios8.0之后的定位
1 ios8.0之后的前台定位
—-> 1.1 同样包含头文件import CoreLocation
—-> 1.2 创建位置管理者
//懒加载
private lazy var location : CLLocationManager =
//创建位置管理者
let location = CLLocationManager()
//设置代理
location.delegate = self
location.requestWhenInUseAuthorization()
//返回
return location
()
—-> 1.3 同样在代理方法中实现定位
extension ViewController : CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print("定位到了")
—–> 1.4 点击屏幕开始定位
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
//点击调用
location.startUpdatingLocation()
—-> 1.5 注意点
——–> 5.1.1 在ios8.0之后,当需要获取用户的位置信息时,系统不再主动弹框让用户进行授权
——–> 5.1.2 如果想要获取用户的位置信息,需要主动请求授权
——–> 5.1.3 请求前台定位(默认情况下,只能在前台获取用户的位置信息)
——–> 5.1.4 一定要在info.plist中配置对应的key(点击进入requestWhenInUseAuthorization可以找到key值)
——–> 5.1.5 不要忘记做版本适配
2 常见错误(如iOS8.0之前的后台定位常见错误)
3 ios8.0之后的后台定位
—-> 3.1 后台定位方案一 : 在前台定位的基础上, 勾选后台模式location updates
—-> 3.2 达到的预想效果 : 当APP退到后台, 会出现一个蓝条, 不断提醒用户,正在定位
—-> 3.3 后台定位方案二 : 在定位时, 直接请求前后台定位授权, 并在info.plist文件中配置对应的key
—-> 3.4 达到的预想效果 : 无论是否勾选后台模式, 都可以获取位置信息. 而且无论前后台, 都不会出现蓝条
4 ios8.0前后台定位测试环境 :
—-> 4.1 XCode版本无要求
—-> 4.2 模拟器选择iOS8.0之后, iOS9.0之前的版本
七 ios9.0之后的定位
1 ios9.0前台定位
—-> 1.1 和iOS8.0之后一致,没有变化(只要注意相关设置即可)
2 ios9.0后台定位
—-> 2.1 后台定位方案一 : 在前台定位授权的基础上,如果勾选了后台模式location updates之后, 还需要额外设置属性allowsBackgroundLocationUpdates = true;
—-> 2.2 在后台获取用户信息的时候,依旧会在屏幕的顶部显示蓝条提醒用户app在时时的获取用户的位置信息
—-> 2.3 当点击了这个蓝条,会打开对应的app
—-> 2.4 后台定位方案二 : 直接请求前后台定位授权的情况, 和iOS8.0之后一致, 没有变化
3 注意 : 在前台定位授权的情况下,如果使用代码允许了后台定位,必须开启后台模式,否则程序会崩溃
—-> 3.1 错误信息
4 可能会遇到的测试问题
—-> 4.1 如果在测试的时候,获取不到位置,是模拟器的问题,因为模拟器是没有位置的
5 代码
—-> 5.1 导入头文件import CoreLocation
—-> 5.2 创建位置管理者
class ViewController: UIViewController
private lazy var location : CLLocationManager =
let location = CLLocationManager()
location.delegate = self
if #available(iOS 8.0, *)
location.requestWhenInUseAuthorization()
if #available(iOS 9.0, *)
location.allowsBackgroundLocationUpdates = true
return location
()
—-> 5.3 代理方法
extension ViewController : CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
print("定位到了")
—-> 5.4 开始定位
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
location.startUpdatingLocation()
八 监听用户授权状态
1 实现CLLocationManagerDelegate的代理方法
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus)
//判断用户决定代码
2 各个授权对应的含义 :
NotDetermined // 用户未决定
Restricted // 受限制
Denied // 用户拒绝
AuthorizedAlways // 前后台定位授权
AuthorizedWhenInUse // 前台定位授权
3 代理方法中模拟用户选择的状态代码块
//switch判断
switch status
case .NotDetermined :
print("用户未决定")
case .Restricted :
print("受限制")
case .Denied :
if CLLocationManager.locationServicesEnabled()
print("用户正在拒绝")
//如果定位服务开启,用户拒绝了,系统不会自动弹框,需要手动给用户提示
if #available(iOS 8.0, *)
let url = NSURL(string: UIApplicationOpenSettingsURLString)!
if UIApplication.sharedApplication().canOpenURL(url)
UIApplication.sharedApplication().openURL(url)
else
//准备多张图片,用来引导用户去设置界面允许开启定位服务
else
print("定位服务关闭,建议打开定位服务")
//如果定位服务关闭,用户下次再打开时候,系统会自动弹框,让用户去设置界面打开定位服务
case .AuthorizedAlways :
print("前后台定位授权")
case .AuthorizedWhenInUse :
print("前台定位授权")
4 定位失败也会调用代理方法
//该方法定位失败的时候就会调用error失败信息 CLLocationManager位置管理者
func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
5 可能会用到的额外参数
—-> 5.1 distanceFilter
/*
1 设置每个多少米定位一次?
1.1 一次
1.2 111km / 100次
2 当距离大于100米的时候回调用一次,获取用户的位置信息
*/
location.distanceFilter = 100
—-> 5.2 desiredAccuracy
/*
1 定位精确度高,定位越准确,越耗电
2 一般情况下,在能够满足条件情况下,使用精确度比较低的
3 一旦定位到用户的位置之后,如果不需要用户的位置了,建议关闭获取用户位置
*/
location.desiredAccuracy = kCLLocationAccuracyBest
6 开发经验
—-> 6.1 定位本身就非常耗电, 定位的精确度越高, 越耗电, 定位时间越长
—-> 6.2 为了省电, 尽量在满足需求的情况下低精确度
7 ios9.0新出的API
if #available(iOS 9.0, *)
location.requestLocation()
—-> 7.1 根据精确度来进行定位,先从最低的精度开始定位,直到定位到最好的,之后返回
—-> 7.2 如果在定位的过程中超时了,那么会返回指定定位到的那个位置,并且只会执行一次
—-> 7.3 该方法不能和stopUpdatingLocation一起用
九 CLLocation对象的使用
1 属性详解 :
—-> 1.1 coordinate : 当前位置所在的经纬度数据(苹果官方解释 : Returns the coordinate of the current location.)
—-> 1.2 altitude : 海拔(苹果官方解释 : Returns the altitude of the location. Can be positive (above sea level) or negative (below sea level).)–> 可以是整数也可以是负数
—-> 1.3 speed : 当前速度 (苹果官方解释 : Returns the speed of the location in m/s. Negative if speed is invalid.)–> 负数是无效的
—-> 1.4 course : 航向(设备移动的方向, 值域范围:0.0 ~ 359.9, 正北方向为0.0)(苹果官方解释 :0.0 - 359.9 degrees, 0 being true North)
2 重要函数 : Returns the lateral distance between two locations.(返回横向两者的距离(物理距离))
func distanceFromLocation(location: CLLocation) -> CLLocationDistance
3 开发经验 :
—-> 3.1 使用之前, 务必判断数据是否有效 : 代码 (判断数据是否可用)
if location.horizontalAccuracy < 0 return
—-> 3.2 功能: 如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用
4 实例演练 :打印当前用户的行走方向,偏离角度以及对于的行走距离(例如 : 北偏东 30度方向 移动了8米)
—-> 4.1 创建位置管理者
//懒加载
private lazy var location :CLLocationManager =
//创建位置管理者
var location = CLLocationManager()
//设置代理
location.delegate = self
if #available(iOS 8.0, *) location.requestAlwaysAuthorization()
location.desiredAccuracy = kCLLocationAccuracyBest
return location
()
—-> 4.2 设置一个属性记录用户上一个位置
//定义一个属性用来记录用户的上一个位置
private var lastLocation : CLLocation?
—-> 4.3 实现代理方法
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
//在位置数组中,最后一个是最新的
//取出位置
guard let location = locations.last elsereturn
//判断位置是否可用
if location.horizontalAccuracy < 0 return
//1.确定航向
if location.course < 0 return
let angleStrs = ["北偏东","东偏南","南偏西","西偏北"]
//当前偏移方向
let index = Int(location.course / 90)
//取出数组中的方向
var angleStr = angleStrs[index]
//2.确定偏移角度
let angle = location.course % 90
//判断角度
if Int(index) == 0
let index = angleStr.startIndex.advancedBy(1)
angleStr = "正" + angleStr.substringToIndex(index)
//3.确定移动的距离
let lastLoc = lastLocation ?? location
//计算出两个点之间的物理距离
let distance = location.distanceFromLocation(lastLoc)
//赋值
lastLocation = lastLoc
//4.拼接字符串,打印距离
if Int(index) == 0
print("\\(angleStr),移动了\\(distance)米")
else
print("\\(angleStr) \\(angle)度,移动了\\(distance)米")
print("定位到了")
—-> 4.4 进行相关配置(上面都已经说明了)
5 经验小结
—-> 5.1 定位的应用场景
——–> 5.1.1 导航
——–> 5.1.2 电商APP,获取用户所在城市(需要与(反)地理编码联合使用)
——–> 5.1.3 数据采集用户信息(例如,统计app使用分布)
——–> 5.1.4 查找周边(周边好友, 周边商家等等)
—-> 5.2 开发经验(由于定位非常耗电; 所以为了给用户省电, 你可以遵守以下小经验)
——–> 5.2.1 不需要获取用户位置时,一定要关闭定位服务:
——–> 5.2.2 如果可以,尽可能使用低精度的desiredAccuracy
——–> 5.2.3 如果是数据采集,(一般都是周期性的去轮询用户位置),在轮询期间一定要关闭定位
十 指南针(了解)
1 实现思路 :
—-> 1.1 利用”磁力计”传感器,获取设备朝向
—-> 1.2 根据设备朝向反向旋转”指南针”图片
2 代码实现
—-> 2.1 在storyboard中设置指南针图片,并且通过拖线的方式拿到该对象
//指南针
@IBOutlet weak var compassImageView: UIImageView!
—-> 2.2 导入头文件
import CoreLocation
—-> 2.3 懒加载位置管理者
//懒加载
private lazy var location : CLLocationManager =
//创建位置管理者
var location = CLLocationManager()
//设置代理
location.delegate = self
//返回位置管理者
return location
()
—-> 2.4 实现代理方法
//代理方法的实现
extension ViewController : CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
//判断朝向是否可用
if newHeading.headingAccuracy < 0 return
//获取朝向设备和角度
let magneticHeading = newHeading.magneticHeading
//将角度转化为弧度
let radian = CGFloat(magneticHeading / 180 * M_PI)
//反转图片弧度
UIView.animateWithDuration(0.25) () -> Void in
self.compassImageView.transform = CGAffineTransformMakeRotation(-radian)
—-> 2.5 判断设置是否可用
override func viewDidLoad()
super.viewDidLoad()
//判断设备是否可以用
if CLLocationManager.headingAvailable() //可用
location.startUpdatingHeading()
else //不可用
SVProgressHUD.showErrorWithStatus("指南针不可用,请更换手机")
3 注意事项
—-> 3.1 获取设备朝向前, 先判断”磁力计”是否可用
—-> 3.2 获取朝向信息前, 判断当前朝向信息是否有效
—-> 3.3 注意”设备朝向”与”航向”的区别
—-> 3.4 使用”磁力计”传感器获取设备朝向, 不需要请求用户授权
4 测试环境
—-> 4.1 XCode版本无要求(建议:XCode7.0+ 不需要开发者账号也可以进行真机调试)
—-> 4.2 必须要求真机设备(只有真机设备才有”磁力计”传感器)
十一 区域监听(了解)
1 概念 :
—-> 1.1 区域 : 就是指划定的一块地域范围(比如圆形区域, 则由区域中心, 和半径组成)
—-> 1.2 区域监听 : 是指,我们通过代码指定一个区域, 然后当用户持握设备进入或者离开指定区域, 我们都能监听到.
2 注意事项 :
—-> 2.1 想要做区域监听, 在iOS8.0之后, 必须请求位置授权
—-> 2.2 原因 : 区域监听的原理就是获取用户的位置, 然后在判断该位置是否在制定区域内, 所以会涉及到用户隐私(位置), 而在iOS8.0之后, 想要访问用户位置信息, 就需要主动请求授权;
3 代码 :
—-> 3.1 在storyboard中设置一个label,用来显示用户的区域状态
@IBOutlet weak var noticeLabel: UILabel!
—-> 3.2 懒加载位置管理者
private lazy var location : CLLocationManager =
//创建位置管理者
let location = CLLocationManager()
//设置代理
location.delegate = self
//允许前后台授权
location.requestAlwaysAuthorization()
//返回位置管理者
return location
()
—-> 3.3 判断该区域是否可以被监听
override func viewDidLoad()
super.viewDidLoad()
//判断该区域是否可以被监听
if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion)
//创建区域
let center = CLLocationCoordinate2DMake(21.123, 123.456)
//设置半径
var radius : CLLocationDistance = 10.0
//标识
let identify = "肖锋区域"
//检测是否超过了最大的监听范围
if radius > location.maximumRegionMonitoringDistance
//如果超过了范围,就让他等于最大值
radius = location.maximumRegionMonitoringDistance
let region = CLCircularRegion(center: center, radius: radius, identifier: identify)
//监听区域
// location.startMonitoringForRegion(region)
location.requestStateForRegion(region)
—-> 3.4 代理方法实现
extension ViewController : CLLocationManagerDelegate
//离开区域
func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion)
print("您已经离开该区域")
//进入区域
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion)
print("您已经进入该区域")
//区域状态发生改变
func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion)
//判断状态
switch state
case .Unknown:
noticeLabel.text = "不知道"
case .Inside:
noticeLabel.text = "进入"
case .Outside:
noticeLabel.text = "离开"
—-> 3.5 进行info.plist相关配置NSLocationAlwaysUsageDescription
—-> 3.6 模拟器配置 : 将模拟器调整到Debug–>Location –> None–> 将设置的区域填入精度和纬度中
4 常见问题
—-> 4.1 区域监听, 测试没有效果?
——–> 4.1.1 首先, 确定代码没有问题, 是否有请求授权;
——–> 4.1.2 其次, 尝试修改模拟器位置信息, 触发进入区域或离开区域的动作
——–> 4.1.3 最后, 如果模拟器出现BUG, 定位不到, 也会无法判定当前区域状态; 所以, 最后可以尝试重置模拟器.
十二 地理编码和反地理编码
1 概念 :
—-> 1.1 地理编码 : 是指根据地址关键字, 将其转换成为对应的经纬度等信息;
—-> 1.2 反地理编码 : 是指根据经纬度信息, 将其转换成为对应的省市区街道等信息;
2 具体实现步骤 :
—-> 2.1 导入CoreLocation框架以及对应的主头文件
—-> 2.2 创建CLGeocoder对象
—-> 2.3 根据地址关键字, 进行地理编码 (地理编码)
—-> 2.3 根据经纬度信息, 进行反地理编码 (反地理编码)
3 测试环境
—-> 3.1 必须连网
—-> 3.2 XCode版本不限
—-> 3.2 iOS模拟器系统版本不限
4 具体事例代码 :
—-> 4.1 storyboard中相关设置
—-> 4.2 导入头文件import CoreLocation
—-> 4.3 通过拖线的方式拿到storyboard中相关对象
//输入的view
@IBOutlet weak var addressTV: UITextView!
//经度
@IBOutlet weak var longitudeTF: UITextField!
//纬度
@IBOutlet weak var latitudeTF: UITextField!
—-> 4.4 懒加载CLGeocoder对象
//懒加载
private lazy var geoc : CLGeocoder =
return CLGeocoder()
()
—-> 4.5 地理编码
//地理编码
@IBAction func geocodingBtnClick()
let address = addressTV.text
geoc.geocodeAddressString(address) (clplas :[CLPlacemark]?,error : NSError?) -> Void in
if error == nil
//对CLPlacemark的解析
//1. 获取地标对象,取第一个,相关度最高
guard let clplas = clplas else return
guard let clpl = clplas.first else return
//2. 设置地址
self.addressTV.text = clpl.name!
//设置经度和纬度 (coordinate:当前位置)
self.longitudeTF.text = "\\(clpl.location!.coordinate.longitude)"
self.latitudeTF.text = "\\(clpl.location!.coordinate.latitude)"
—-> 4.6 反地理编码
//反地理编码
@IBAction func reverGeocodingBtnClick()
//获取位置的经度和纬度数据
let latitude = CLLocationDegrees(self.latitudeTF.text!)
let longitude = CLLocationDegrees(self.longitudeTF.text!)
let location = CLLocation(latitude: latitude!, longitude: longitude!)
geoc.reverseGeocodeLocation(location) (clplas : [CLPlacemark]?,error : NSError?) -> Void in
if error == nil
//1. 获取地标对象,取第一个,相关度最高
guard let clplas = clplas else return
guard let clpl = clplas.first else return
//2. 设置地址
self.addressTV.text = clpl.name!
//设置经度和纬度 (coordinate:当前位置)
self.longitudeTF.text = "\\(clpl.location!.coordinate.longitude)"
self.latitudeTF.text = "\\(clpl.location!.coordinate.latitude)"
5 常见问题 : 测试无数据?
—-> 5.1 首先, 检查是否有联网;
—-> 5.2 其次, 如果是反地理编码,可尝试更换经纬度再次尝试, 有的经纬度没有对应信息
6 该功能具体应用场景
—-> 6.1 发表说说/发微博时来自哪里
—-> 6.2 美团或者大众点评获取用户所在区域
7 定位 + 反地理编码运用(该部分我只讲代码实现写上,具体怎么实现的,大家应该一看就明白)
import UIKit
import CoreLocation
class ViewController: UIViewController
//懒加载(一)
private lazy var location : CLLocationManager =
//创建位置管理者
let location = CLLocationManager()
//设置代理
location.delegate = self
//始终获取用户位置
location.requestAlwaysAuthorization()
//返回
return location
()
//懒加载(二)
private lazy var geco : CLGeocoder =
return CLGeocoder()
()
//当点击屏幕的时候开始获取用户的位置
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
location.startUpdatingLocation()
//实现代理方法
extension ViewController : CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
//获取用户位置是否可用
guard let location = locations.last else return
//判断位置是否可用
if location.horizontalAccuracy < 0 return
//获取经度和纬度进行反地理编码
geco.reverseGeocodeLocation(location) (clplas : [CLPlacemark]?,error : NSError?) -> Void in
//判断错误信息
if error == nil
guard let clplas = clplas else return
guard let clpl : CLPlacemark = clplas.first else return
//打印地址
print(clpl.name!)
十三 使用给第三方框架进行定位
1 使用原因 : 因为使用CoreLocation框架进行获取用户位置信息, 是通过代理进行回调; 而第三方框架将”代理模拟”转换成为”block模式”; 使用起来比较方便, 而且额外增加了超时时间等功能.
2 框架名称 : locationManager
3 框架地址 : https://github.com/intuit/LocationManager
4 注意事项 : 一般集成第三方框架到项目中, 请先确保该框架没有问题, 然后再向项目中集成(导入的时候预先编译下)
5 代码 :
—-> 5.1 获取单例 :
let locationMan = INTULocationManager.sharedInstance()
—-> 5.2 获取一次用户信息
// 获取一次用户信息
let locationRequestID : INTULocationRequestID = locationMan.requestLocationWithDesiredAccuracy(.Room, timeout: 5, delayUntilAuthorized: false) (location : CLLocation!, _,status : INTULocationStatus) -> Void in
//判断
if status == INTULocationStatus.Success
print("获取到位置")
else
print(status.rawValue)
—-> 5.3 一直获取用户位置信息
let LocationRequestID: INTULocationRequestID = locationMan.subscribeToLocationUpdatesWithDesiredAccuracy(.Room) (location : CLLocation!, _,status : INTULocationStatus) -> Void in
if status == INTULocationStatus.Success
print("获取到位置")
else
print(status.rawValue)
6 其它具体实现请参照该框架对应的 readME
十四 总结
1 地图与定位,知识点还是相对比较简单的,功能也容易实现,不求能理解,只要能运用就行.开发过程中的情况我都写在里面了,希望大家还是抽时间看一下.
2 最后,大家如果觉得我写的博客还行,麻烦大家多多关照,有什么问题可直接给我留言,我一定尽可能的解答,谢谢!!!!
以上是关于地图与定位的主要内容,如果未能解决你的问题,请参考以下文章
Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作