- 在info.plist中添加key:
NSLocationWhenInUseUsageDescription :当app在前台的时候,才可以获取到定位信息
NSLocationAlwaysUsageDescription :app在前台、后台、挂起、结束进程状态时,都可以获取到定位信息
这两个key对应的值都是NSString,简要填写为何需要定位,比如Location is required to find out how many steps you run。
NSLocationAlwaysUsageDescription
字符串类型(需要设置值),切换到后台等10分钟后,在进入程序不会重新载入,会一直运行。
- 向用户申请获取定位请求:
[locationManager requestWhenInUseAuthorization];//相对应info.plist中的NSLocationWhenInUseUsageDescription键
[locationManager requestAlwaysAuthorization];//相对应info.plist中的NSLocationAlwaysUsageDescription键
- ios8下所有授权状态说明:
kCLAuthorizationStatusNotDetermined:用户还没有被请求获取授权,只第一次出现
kCLAuthorizationStatusRestricted:用户在设置里关闭了位置服务
kCLAuthorizationStatusDenied:用户收到获取授权的请求,但点击了NO,或者在设置里关闭了
kCLAuthorizationStatusAuthorized:用户收到获取授权的请求,点击了YES;(此状态在ios8废弃了,ios7以及以下可用)
kCLAuthorizationStatusAuthorizedAlways = kCLAuthorizationStatusAuthorized用户授权app在任何时候获取位置信息
kCLAuthorizationStatusAuthorizedWhenInUse:用户授权app在前台获取位置信息
ios 里如何判断当前应用的定位服务是否可用
(用户开启了定位服务&&(用户还没有被请求获取授权||用户收到获取授权的请求,点击了YES)),此时就可以初始化定位服务了
([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized
|| [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined)) {
//定位功能可用,开始定位
_locationManger = [[CLLocationManager alloc] init];
locationManger.delegate = self;
[locationManger startUpdatingLocation];
}
else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied){
NSlog("定位功能不可用,提示用户或忽略");
}
如果需要定位,
NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:settingsURL];
让用户自己去选择,而且可以改变kCLAuthorizationStatusAuthorizedAlways和kCLAuthorizationStatusAuthorizedWhenInUse也可以用
百度地图计算坐标之间直线距离
-(double)distanceBetweenOrderBy:(double)lat1 :(double)lat2 :(double)lng1 :(double)lng2{
CLLocation* curLocation = [[CLLocation alloc] initWithLatitude:lat1 longitude:lng1];
CLLocation* otherLocation = [[CLLocation alloc] initWithLatitude:lat2 longitude:lng2];
double distance = [curLocation distanceFromLocation:otherLocation];
return distance;
}
百度地图计算坐标之间步行距离
-(void)distanceInfo{
if (!self.routeSearch) {
self.routeSearch = [[BMKRouteSearch alloc] init];
self.routeSearch.delegate = self;
}
BMKPlanNode *start = [[BMKPlanNode alloc] init];
CLLocationCoordinate2D cloStart;
cloStart.latitude = [[self.dictData valueForKey:@"courierLatitude"] doubleValue];
start.pt = cloStart;
BMKPlanNode *end = [[BMKPlanNode alloc] init];
CLLocationCoordinate2D cloEnd;
cloEnd.latitude = [[self.dictData valueForKey:@"shopLatitude"] doubleValue];
cloEnd.longitude = [[self.dictData valueForKey:@"shopLongitude"] doubleValue];
end.pt = cloEnd;
BMKWalkingRoutePlanOption *walkingRoutePlanOption = [[BMKWalkingRoutePlanOption alloc] init];
walkingRoutePlanOption.from = start;
walkingRoutePlanOption.to = end;
BOOL flg = [self.routeSearch walkingSearch:walkingRoutePlanOption];
if (flg) {
FLDDLogDebug(@"success");
}
else {
FLDDLogInfo(@"failed");
}
walkingRoutePlanOption = nil;
end = nil;
start= nil;
}
#pragma mark -BMKRouteSearchDelegate
- (void)onGetWalkingRouteResult:(BMKRouteSearch *)searcher result:(BMKWalkingRouteResult *)result errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
BMKWalkingRouteLine *walkingLine = (BMKWalkingRouteLine *)[result.routes objectAtIndex:0];
NSString* distance=[NSString stringWithFormat:@"%d",walkingLine.distance];
FLDDLogDebug(@"distance:%d", walkingLine.distance);
}
}