iOS 地图的相关知识《一》
2016-07-07 15:19
369 查看
定位管理器
在处理相关地图的时候,有可能遇到一些问题,比如初次时候的时候,没有弹出地图的提示框,或者没有网络,或者没有显示地图
下面是相关的处理:
/*相关的博客http://my.oschina.net/are1OfBlog/blog/420034#OSC_h1_1
1. 要实现地图、导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作。
2. Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。
3. 在Core Location中主要包含了定位、地理编码(包括反编码)功能。
在iOS8中配置配置项发生了变化,可以通过配置
NSLocationAlwaysUsageDescription
或者 NSLocationWhenInUseUsageDescription
来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。
同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。由于本人机器已经更新到最新的iOS8.1下面的内容主要针对iOS8,使用iOS7的朋友需要稍作调整。
还有网络的相关设置
*/
/**
设置地图的时候
一定要在plist文件里面去设置属性:NSLocationAlwaysUsageDescription
、NSLocationWhenInUseUsageDescription
以及网络属性的设置
*/
//定位管理器
1.首先导入头文件
#import <CoreLocation/CoreLocation.h>//定位
2.声明熟悉
CLLocationManager *_locationManager;//定位管理器
3.设置代理
<CLLocationManagerDelegate>
- (void)positionOfMap
{
//定位管理器
_locationManager=[[CLLocationManager
alloc]init];
//+ (BOOL)locationServicesEnabled
是否启用定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务
if (![CLLocationManager
locationServicesEnabled]) {
NSLog(@"定位服务当前可能尚未打开,请设置打开!");
return;
}
if ([[[UIDevice
currentDevice] systemVersion]
floatValue] >= 8.0) {
[_locationManager
requestWhenInUseAuthorization]; //调用了这句,就会弹出允许框了.
}
/*
+ (CLAuthorizationStatus)authorizationStatus;
定位服务授权状态,返回枚举类型:
kCLAuthorizationStatusNotDetermined:
用户尚未做出决定是否启用定位服务
kCLAuthorizationStatusRestricted:
没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权
kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态
kCLAuthorizationStatusAuthorizedAlways:
应用获得授权可以一直使用定位服务,即使应用不在使用状态
kCLAuthorizationStatusAuthorizedWhenInUse:
使用此应用过程中允许访问定位服务
*/
//如果没有授权则请求用户授权
if ([CLLocationManager
authorizationStatus]==kCLAuthorizationStatusNotDetermined){
[_locationManager
requestWhenInUseAuthorization];
}else
if([CLLocationManager
authorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse){
//设置代理
_locationManager.delegate=self;
//设置定位精度
_locationManager.desiredAccuracy=kCLLocationAccuracyBest;
//定位频率,每隔多少米定位一次
CLLocationDistance distance=10.0;//十米定位一次
_locationManager.distanceFilter=distance;
//启动跟踪定位
[_locationManager
startUpdatingLocation];//开始定位追踪,开始定位后将按照用户设置的更新频率执行
}
}
#pragma mark - CoreLocation 代理
#pragma mark 跟踪定位代理方法,每次位置发生变化即会执行(只要定位到相应位置)
//可以通过模拟器设置一个虚拟位置,否则在模拟器中无法调用此方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray
*)locations{
CLLocation *location=[locations
firstObject];//取出第一个位置
CLLocationCoordinate2D coordinate=location.coordinate;//位置坐标
NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
//如果不需要实时定位,使用完即使关闭定位服务
[_locationManager
stopUpdatingLocation];//停止定位追踪
}
在处理相关地图的时候,有可能遇到一些问题,比如初次时候的时候,没有弹出地图的提示框,或者没有网络,或者没有显示地图
下面是相关的处理:
/*相关的博客http://my.oschina.net/are1OfBlog/blog/420034#OSC_h1_1
1. 要实现地图、导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作。
2. Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。
3. 在Core Location中主要包含了定位、地理编码(包括反编码)功能。
在iOS8中配置配置项发生了变化,可以通过配置
NSLocationAlwaysUsageDescription
或者 NSLocationWhenInUseUsageDescription
来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。
同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。由于本人机器已经更新到最新的iOS8.1下面的内容主要针对iOS8,使用iOS7的朋友需要稍作调整。
还有网络的相关设置
*/
/**
设置地图的时候
一定要在plist文件里面去设置属性:NSLocationAlwaysUsageDescription
、NSLocationWhenInUseUsageDescription
以及网络属性的设置
*/
//定位管理器
1.首先导入头文件
#import <CoreLocation/CoreLocation.h>//定位
2.声明熟悉
CLLocationManager *_locationManager;//定位管理器
3.设置代理
<CLLocationManagerDelegate>
- (void)positionOfMap
{
//定位管理器
_locationManager=[[CLLocationManager
alloc]init];
//+ (BOOL)locationServicesEnabled
是否启用定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务
if (![CLLocationManager
locationServicesEnabled]) {
NSLog(@"定位服务当前可能尚未打开,请设置打开!");
return;
}
if ([[[UIDevice
currentDevice] systemVersion]
floatValue] >= 8.0) {
[_locationManager
requestWhenInUseAuthorization]; //调用了这句,就会弹出允许框了.
}
/*
+ (CLAuthorizationStatus)authorizationStatus;
定位服务授权状态,返回枚举类型:
kCLAuthorizationStatusNotDetermined:
用户尚未做出决定是否启用定位服务
kCLAuthorizationStatusRestricted:
没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权
kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态
kCLAuthorizationStatusAuthorizedAlways:
应用获得授权可以一直使用定位服务,即使应用不在使用状态
kCLAuthorizationStatusAuthorizedWhenInUse:
使用此应用过程中允许访问定位服务
*/
//如果没有授权则请求用户授权
if ([CLLocationManager
authorizationStatus]==kCLAuthorizationStatusNotDetermined){
[_locationManager
requestWhenInUseAuthorization];
}else
if([CLLocationManager
authorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse){
//设置代理
_locationManager.delegate=self;
//设置定位精度
_locationManager.desiredAccuracy=kCLLocationAccuracyBest;
//定位频率,每隔多少米定位一次
CLLocationDistance distance=10.0;//十米定位一次
_locationManager.distanceFilter=distance;
//启动跟踪定位
[_locationManager
startUpdatingLocation];//开始定位追踪,开始定位后将按照用户设置的更新频率执行
}
}
#pragma mark - CoreLocation 代理
#pragma mark 跟踪定位代理方法,每次位置发生变化即会执行(只要定位到相应位置)
//可以通过模拟器设置一个虚拟位置,否则在模拟器中无法调用此方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray
*)locations{
CLLocation *location=[locations
firstObject];//取出第一个位置
CLLocationCoordinate2D coordinate=location.coordinate;//位置坐标
NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
//如果不需要实时定位,使用完即使关闭定位服务
[_locationManager
stopUpdatingLocation];//停止定位追踪
}
相关文章推荐
- android Google Map获取地理位置信息的方法
- Spark RDD API详解(一) Map和Reduce
- Python中map()函数浅析
- Android使用Google Map浅谈
- CSS浮动和定位学习笔记
- C#实现txt定位指定行完整实例
- Erlang中的映射组Map详细介绍
- c++中map的基本用法和嵌套用法实例分析
- 百度地图给map添加右键菜单(判断是否为marker)
- JavaScript中实现Map的示例代码
- Flex中怎么给表格中的滚动条定位避免刷新回到原处
- JavaScript实现点击文本自动定位到下拉框选中操作
- 一个JavaScript操作元素定位元素的实例
- jquery中map函数与each函数的区别实例介绍
- jquery中map函数遍历数组用法实例
- jquery与google map api结合使用 控件,监听器
- 浅谈jquery的map()和each()方法
- Jquery中map函数的用法
- JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
- JS模拟的Map类实现方法