Iphone GPS没有给出准确的经纬度

时间:2012-09-20 17:26:30

标签: iphone ios cllocationmanager

Hello Friend我看过很多关于gps准确性问题的帖子,但它一直没有用到

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

    NSString  *latstr = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
    NSString  *longstring=[NSStringstringWithFormat:@"%f",newLocation.coordinate.longitude];

     if (abs(howRecent)>5.0)
     {
         [self.locationManager startUpdatingLocation];
         return;
      }
    if(abs(newLocation.horizontalAccuracy)<0.0f)
    {
        [self.locationManager startUpdatingLocation];
        return;
    }
    if(newLocation.horizontalAccuracy>65.0f)
    {
        [self.locationManager startUpdatingLocation];
        return;
    }
    self.latstring = [latstr copy];
    self.longstr = [longstring copy];

    if((updateLocationFirst||loadFirstView))
    {    
        [[NSUserDefaults standardUserDefaults]setObject:latstring forKey:@"Latitude"];
        [[NSUserDefaults standardUserDefaults]setObject:longstr forKey:@"Longitude"];
        [self displayParticularDaySpecial];
        loadFirstView=FALSE;
        updateLocationFirst=FALSE;
        [self.locationManager stopUpdatingLocation];
    }
}

这里的问题是,如果我正在降低准确度值,我会将谷歌api的纬度和经度发送到某些地址,这需要花费大量的时间来加载,当你到达目的地时这个值有问题目的地与0.6英里的差异。

2 个答案:

答案 0 :(得分:2)

您应该参考Location Awareness Programming Guide,它提供了确定您所在位置的优秀编程示例。

正如您在该文档的演示中所看到的,当您start the standard location manager时,您通常会告诉它您需要什么样的准确性。一旦启动了位置管理器,您就不必再次启动它(就像您在代码示例中所做的那样)。 didUpdateLocations方法将一次又一次地调用,准确性越来越高,所有这些都是独立的。您无需再次启动位置管理器...它会一直运行,直到您关闭它为止。根据定义,如果您在didUpdateLocations,则表示它已经开启。

我还注意到你正在使用旧didUpdateToLocation。如果你正在为iOS 6编程,你真的想使用didUpdateLocations,这是CLLocationManagerDelegate方法的当前版本。

最后,您提到需要很长时间才能找到您的位置。这很可能。事实上,在某些地区,你永远不会非常接近(或任何地方)。您的应用应该假设准确的位置需要一段时间,如果您从未获得真正准确的位置,您应该优雅地处理,这是非常可能的。

答案 1 :(得分:1)

您是否在CLLocationManager中设置了desiredLocationAccuracy?默认情况下,范围有点宽。

获取非常精确的值需要一些时间。