如何使用 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 包含两个属性 - horizontalAccuracyverticalAccuracy。您可以通过执行一些测试并显示这些属性的值来衡量程序的准确性。

【讨论】:

知道为什么当我按下按钮运行该代码(noteLocation 方法)时,允许对话框打开一秒钟然后消失,没有交互?

以上是关于如何使用 CoreLocation 进行用户发起的精确定位?的主要内容,如果未能解决你的问题,请参考以下文章

您如何发现用户正在使用带有缓冲区的 CoreLocation 的美国州?

:使用CoreLocation定位

iOS核心笔记—CoreLocation框架-基础

在 Objective-C 中无法使用 CoreLocation 获取纬度和经度

如何在 xcode 中重新启用 CoreLocation 提示?

如何找出 iphone CoreLocation Data 的来源?