5

你好朋友我看过很多关于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 英里的差异。

4

2 回答 2

2

您应该参考位置感知编程指南,该指南提供了用于确定您的位置的优秀编程示例。

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

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

最后,您提到获取您的位置需要很长时间。这是很有可能的。事实上,在某些区域,你永远不会离得很近(或任何位置)。你的应用程序应该假设准确的位置需要一段时间,如果你从来没有得到一个真正准确的位置,你应该优雅地处理,这是很有可能的。

于 2012-11-26T22:46:31.673 回答
1

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

获得一个非常准确的值需要一些时间。

于 2012-11-26T22:46:08.773 回答