0

有谁知道即使位置服务已打开,什么可能导致 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);

  1. 然后,当 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.horizontalAccuracy永远不会低于7000。

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

4

2 回答 2

3

您是否设置了位置管理器的delegate属性并调用startUpdatingLocation了它?

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

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

于 2013-03-04T15:28:45.650 回答
0

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

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

于 2013-03-05T01:15:28.150 回答