卡在 CLLocation

Posted

技术标签:

【中文标题】卡在 CLLocation【英文标题】:Stuck on CLLocation 【发布时间】:2012-01-05 09:53:25 【问题描述】:

这更像是一个理论问题而不是代码: 到目前为止我做了什么:

我的应用严重依赖位置跟踪。

我在大约 5 小时前发布了一个关于它的问题,但没有合适的答案,现在在这里提出一个新问题已经很老了。我会在得到这个问题的答案后关闭它。

我想要做的是有一个用户按下的按钮。它使位置管理器开始更新位置,然后每移动 5 英尺。我想让 iPhone 播放随机声音。 我实现了下面给出的正确代码,现在我在我的设备上进行了测试,从一个地方搬到我家的这里。通过反复试验,我知道前几个位置是 iPhone 试图获得准确的结果,通常是要避免的,所以我把它作为处理位置的条件,这些位置是在 2 秒以上之后出现的。

现在我的真正问题: 我的设备在 wifi 上。(没有 gps 也没有)所以经过几次初始无用的位置更新。我的警报停止显示.. 我想:为什么不工作。我将其设置为最准确。过滤到 1.5 米 .. 我在房子里移动了 15 英尺并且没有更新?.. 现在我认为这是因为它正在通过 wifi 获取位置,因此即使我移动 40 个源,它也没有找到新的位置无线上网。?我说的对吗?

如果这是真的 .. 谁能告诉这在 gps 中是否可以正常工作 .. 对于美国用户.. 他们有很多塔.. 这样我的应用程序就会正确更新距离至少 5 米的新位置它以前的位置..

抱歉问了这么长的问题.. 对我来说有太多疑问..

-(id) init

    if(self = [super init])
       
           locationManager = [[CLLocationManager alloc] init];
           locationManager.delegate = self;
//           locationManager.distanceFilter = 1.5;
           locationManager.desiredAccuracy = kCLLocationAccuracyBest;
           return self;   
       
    return nil;




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


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"New Lcoation"
                                                    message:nil
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];


    self.currentLocation = newLocation;

    BOOL newLocationIsValid = [self isValidLocation:newLocation withOldLocation:oldLocation];
    if(newLocationIsValid && oldLocation)
    
        int distance = [newLocation distanceFromLocation:oldLocation];
        if(distance >2 && distance <10)
        

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Distance"
                                                        message:[NSString stringWithFormat:@"%i meters",distance]
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
            [fileURl release];
        
    


-(BOOL)isValidLocation:(CLLocation*)newLocation withOldLocation:(CLLocation*)oldLocation
  

    if(newLocation.horizontalAccuracy < 0 )
    
        return NO;
    
    NSTimeInterval secondsSinceLastPoint = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];
    if(secondsSinceLastPoint < 0)
    
        return NO;
    

    if(secondsSinceLastPoint < 2)
    
        int distance = [newLocation distanceFromLocation:oldLocation];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Distance"
                                                        message:[NSString stringWithFormat:@"%i meters",distance]
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
        return NO;
    

    return YES;

【问题讨论】:

【参考方案1】:

是的,这不起作用,因为您使用 wifi 进行定位。位置服务只知道您的 wifi 在哪里,而不是您相对于 wifi 的位置(这很好)。

因此,为了您的服务,您必须使用 gps。即便如此,也不保证准确性。

见http://www.kowoma.de/en/gps/accuracy.htm

【讨论】:

【参考方案2】:

当您不使用真正的 GPS 信号时,系统会通过三角测量来检索位置,这绝不是您想要的准确度。即使有很多 WiFi 或手机信号塔,精度仍然是几米,更像是 100,然后是 10。

您想要的精度只能通过 GPS 来实现,有些情况下精度只有 100 米左右。这完全取决于 GPS 信号质量。

【讨论】:

感谢您清除我的疑问..只有当我能接受两个正确答案时:D\

以上是关于卡在 CLLocation的主要内容,如果未能解决你的问题,请参考以下文章

克隆卡在检查源

用mis文件重新安装MYSQL卡在最后一步,卡在Starting Server,删除注册表无效的解决方案

MPMoviePlayer 卡在“正在加载...”

HP P420阵列卡在initializing

Vue.js 卡在 40% 的服务如何恢复?

为啥 AWS Batch 作业卡在 RUNNABLE 中?