【问题标题】:iPhone - LocationManager doesn't converge even though a user's Location Services are on?iPhone - 即使用户的位置服务打开,LocationManager 也不会聚合?
【发布时间】:2013-02-18 17:53:04
【问题描述】:

有没有人知道什么会导致 locationManager 不收敛到一个值,即使定位服务是打开的?

编辑 1 - locationManager 对于某些用户可以正常工作,但对于其他用户,他们的位置永远不会更新。并且用户的设备(其位置从未更新)具有 GPS,因为这些设备是 iPhone 5、iPad3、iPhone 4 等。我想知道它们是否在该国太远并且总是在室内。所以 GPS、WiFi、手机信号塔无法到达它们?但不知何故他们上网......

编辑 2 - 更多说明:用户可以访问互联网,因为他们能够在我的网络服务器上创建一个新帐户。当 locationManager 收敛到一个值时,使用下面的#2,然后我的 web 服务器上的 gps 位置会更新,但这永远不会发生。用户在设备上使用应用程序的时间足以回答 10 个问题并上传他们的照片。如果用户可以访问互联网,那么 locationManager 的收敛时间还不够吗?

编辑 3 - 另一个奇怪的事情发生了:在网站上创建用户帐户时,用户的 gps_lat 设置为 0。当用户使用 iPhone 上的 locationManager 在网站上更新他的 gps_lat 时,更新后的gps_lat 的值为 (null)。什么可能导致 locationManager 产生 output = (null)?

  1. 我使用以下代码检查位置服务是否已开启:

     BOOL locationServicesDenied    = ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied);
    
  2. 然后,当 locationManager 与此代码融合时,我会更新用户在网站上的位置:

    -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    if((newLocation.horizontalAccuracy >  0.0f) && (newLocation.horizontalAccuracy < 7000.0f){
             [self update_website:self];
        } 
    

但是 update_website 永远不会被调用。这让我觉得 newLocation.horizo​​ntalAccuracy 永远不会低于 7000。

有没有人知道为什么即使位置服务打开,locationManager 也无法收敛?

【问题讨论】:

  • 很可能该委托方法永远不会被调用。您可能会收到位置服务错误。实现其他委托方法并检查是否调用了哪个委托方法(如果有)。
  • 我添加了一个编辑,指示为某些用户调用委托方法,因为他们的 gps 数据已更新。是否有什么东西可以阻止委托方法被某些用户调用,但又被其他用户调用?
  • 如果没有错误且 GPS 无法获取位置,则不会调用代理。 GPS 将继续尝试获取位置,但如果设备在地下(例如),它将一无所获(除非有缓存的位置)。

标签: iphone ios ipad core-location cllocationmanager


【解决方案1】:

如果没有错误并且 GPS 没有足够的信号来计算位置,则不会调用代理。 GPS 将继续尝试获取位置,但如果设备在地下(例如),它将一无所获(除非有缓存的位置)。

你等得够久了吗?即使设备有 GPS 信号但没有数据网络(WiFi/Cell),那么位置管理器也无法通过数据网络获取卫星星历。获得 GPS 位置需要更长的时间,从 2 到 10 分钟不等。辅助 GPS 速度更快,但需要数据连接。

【讨论】:

  • 使用编辑#2 添加了更多信息。
【解决方案2】:

您是否设置了位置管理器的delegate 属性并在其上调用了startUpdatingLocation

[myLocationManager setDelegate:self];
[myLocationManager startUpdatingLocation];

编辑:我认为这只是在测试设备上发生的。如果在用户设备上,精度完全有可能超过7000m。如果唯一用于修复的是蜂窝无线电(没有 GPS,没有 WiFi),则准确度约为 1-10k,具体取决于蜂窝塔的密度。在线用户(以太网或 WiFi)不保证他们的 WiFi 在已知(和映射)点的数据库中。

【讨论】:

  • 我更新了问题并提到对于某些用户 locationManager 工作正常,所以 [myLocationManager startUpdatingLocation];正在被调用。
  • 这是一个关于信号塔间距的有趣点。我应该使用 7K 以外的其他精度限制来保证返回 gps 值吗?但是根据我上面的编辑#3,当用户在网站上用 (null) 更新他们的 gps_lat 时,就会达到 7K 的限制,因为这是更新网站值的唯一方法。
  • 没有硬性限制,但 100m-1000m 大约是 WiFi 精度。 GPS将得到大约10m-100m。不同的设备提供不同的 GPS 精度。 WWDC 视频中有一个很棒的开发者演讲很好地解释了这一点。
  • 我观看了 WWDC 2012 上关于定位服务保持正轨的演讲。这也是你指的谈话吗?它似乎没有回答这个问题。
  • @JamesTesta WWDC 2011 Session 500 中有更多信息:“核心位置的新功能”。 developer.apple.com/videos/wwdc/2011/…
猜你喜欢
  • 2017-09-22
  • 2015-10-04
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2017-12-05
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多