如何使用 CoreLocation 进行用户发起的精确定位?
Posted
技术标签:
【中文标题】如何使用 CoreLocation 进行用户发起的精确定位?【英文标题】:How to do a user initiated precision location using CoreLocation? 【发布时间】:2013-12-27 02:06:38 【问题描述】:这是我的代码(实现类声明了 CLCoreLocationManagerDelegate 协议):
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
NSLog(@"locations %@", locations);
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
NSLog(@"auth status: %u", status);
- (void)noteLocation
if ([CLLocationManager locationServicesEnabled] == NO)
NSLog(@"rejected");
return;
;
CLLocationManager* manager = [CLLocationManager new];
manager.delegate = self;
manager.pausesLocationUpdatesAutomatically = NO;
manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
[manager startUpdatingLocation];
运行noteLocation
方法,我的应用会短暂打开“thisApp”希望使用您的当前位置提示。但它立即关闭。无论哪种方式,我都无法回答。并且委托方法永远不会触发。
我只是想走到这一步。但也存在一个更大的架构问题。我的应用程序对其编目的项目具有 note current location 功能,因此用户可以将他的当前位置标记为该项目的位置。除非他们选择该选项,否则我不需要(或不想)浪费电池运行 GPS。但是当他们这样做时,我想要尽可能精确的值。我的想法是以最大精度运行它,等待几次更新(也许确保值稳定),然后记录最终值。有没有更好的方法来做到这一点?
更新
提示正在消失,因为我需要将 LocationManager 实例存储在不会被垃圾收集的地方。
【问题讨论】:
【参考方案1】:我看到您正在使用kCLLocationAccuracyBestForNavigation
,它提供了尽可能高的准确性。除非您尝试获取运动中的用户或对象的当前位置,否则您不必等待太多位置更新。
CLLocation 包含两个属性 - horizontalAccuracy
和 verticalAccuracy
。您可以通过执行一些测试并显示这些属性的值来衡量程序的准确性。
【讨论】:
知道为什么当我按下按钮运行该代码(noteLocation
方法)时,允许对话框打开一秒钟然后消失,没有交互?以上是关于如何使用 CoreLocation 进行用户发起的精确定位?的主要内容,如果未能解决你的问题,请参考以下文章
您如何发现用户正在使用带有缓冲区的 CoreLocation 的美国州?
在 Objective-C 中无法使用 CoreLocation 获取纬度和经度