博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定位CoreLocation
阅读量:5732 次
发布时间:2019-06-18

本文共 2667 字,大约阅读时间需要 8 分钟。

//添加包:CoreLocation.framework
//.plist文件:
请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置
NSLocationAlwaysUsageDescription;
请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置
NSLocationWhenInUseUsageDescription,都设置为YES
手动输入
@property
(
nonatomic
,
retain
)
CLLocationManager
*locationManager;
//
地理编码
/
逆地理编码
@property
(
nonatomic
,
retain
)
CLGeocoder
*geocoder;
- (
void
)createLocationManager
{
   
self
.
locationManager
= [[
CLLocationManager
alloc
]
init
];
   
self
.
geocoder
= [[
CLGeocoder
alloc
]
init
];
   
   
if
(![
CLLocationManager
locationServicesEnabled
]) {
       
NSLog
(
@"
定位服务当前可能尚未打开
,
请设置打开
"
);
       
return
;
    }
   
//
如果没有授权则请求用户授权
   
if
([
CLLocationManager
authorizationStatus
] ==
kCLAuthorizationStatusNotDetermined
) {
        [
self
.
locationManager
requestWhenInUseAuthorization
];
    }
else
if
([
CLLocationManager
authorizationStatus
] ==
kCLAuthorizationStatusAuthorizedWhenInUse
) {
       
//
设置代理
       
self
.
locationManager
.
delegate
=
self
;
       
//
设置定位精度
       
self
.
locationManager
.
desiredAccuracy
=
kCLLocationAccuracyBest
;
       
//
定位频率
,
每隔多少米定位一次
//        CLLocationDistance distance = 1000.0;//
十米定位一次
       
self
.
locationManager
.
distanceFilter
=
kCLDistanceFilterNone
;
       
//
启动跟踪定位
        [
self
.
locationManager
startUpdatingLocation
];
    }
 
}
#pragma
跟踪定位代理方法
,
每次位置发生变化即执行
- (
void
)locationManager:(
CLLocationManager
*)manager didUpdateLocations:(
NSArray
<
CLLocation
*> *)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);
   
  
[
self getAddressByLatitude:coordinate.latitude longitude:coordinate.longitude];
   
//
如果不需要实时定位,使用完即使关闭定位服务
    [
_locationManager
stopUpdatingLocation
];
}
//
CLGeocoder类用于处理地理编码和逆地理编码(又叫反地理编码)功能.
地理编码:根据给定的位置(通常是地名)确定地理坐标(经、纬度)。
逆地理编码:可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等
#pragma mark
根据坐标取得地名(逆地理编码)
-(
void
)getAddressByLatitude:(
CLLocationDegrees
)latitude longitude:(
CLLocationDegrees
)longitude{
   
//
反地理编码
   
CLLocation
*location=[[
CLLocation
alloc
]
initWithLatitude
:latitude
longitude
:longitude];
    [
_geocoder
reverseGeocodeLocation
:location
completionHandler
:^(
NSArray
*placemarks,
NSError
*error) {
       
CLPlacemark
*placemark=[placemarks
firstObject
];
        NSLog(@"%@", placemark.name);//位置名
     
 
NSLog
(
@"thoroughfare,%@"
,place.
thoroughfare
);      
//
街道
       
NSLog
(
@"subThoroughfare,%@"
,place.
subThoroughfare
);
//
子街道
       
NSLog
(
@"locality,%@"
,place.
locality
);              
//
       
NSLog
(
@"subLocality,%@"
,place.
subLocality
);        
//
        NSLog(@"country,%@",place.country);                 // 国家
       
//
字典形式输出
//        NSLog(@"
详细信息
:%@",placemark.addressDictionary);
    }];
}
//

转载于:https://www.cnblogs.com/yuhaojishuboke/p/5155859.html

你可能感兴趣的文章
Arduino和C51开发光敏传感器
查看>>
java_泛型方法使用实例
查看>>
guava cache简单学习笔记
查看>>
选课系统
查看>>
无线电导航
查看>>
run-sequence
查看>>
大聊Python----SocketServer
查看>>
Hadoop 面试题 之Hive
查看>>
解决pycharm问题:module 'pip' has no attribute 'main'
查看>>
使用Python求解水仙花问题
查看>>
做市商制度
查看>>
zencart根据configuration_id cID查找站点配置
查看>>
Debug与Release版本的区别
查看>>
CoreText.framework(转)
查看>>
Selenium:元素等待的4种方法
查看>>
如何写出好的产品需求文档
查看>>
哈夫曼树对文件进行译码
查看>>
Quartz任务调度
查看>>
HDFS操作
查看>>
基于注解整合struts2与spring的时候如果不引入struts2-spring-plugin包自动装配无效
查看>>