位置管理员为旧位置提供新的时间戳

时间:2011-11-07 19:47:48

标签: ios cllocationmanager cllocation

我的iPhone应用程序出现以下问题:

我定期启用位置管理器,我会等待多个位置更新。收到新位置后,我会检查新位置的时间戳属性,以确定它是否是旧位置:

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

    numberOfUpdatesInInterval++;
    NSLog(@"%d;%f;%f;%.0f;%@;%@;%@",
                              numberOfUpdatesInInterval,
                              newLocation.coordinate.latitude,
                              newLocation.coordinate.longitude,
                              newLocation.horizontalAccuracy,
                              newLocation.timestamp,
                              [self getCurrentDateAsString],
                              newLocation);
}

我现在遇到的问题是我收到了新的位置,其中时间戳是新的,但坐标仍然是我之前收到的旧位置。当我以120km / h的速度驾驶我的汽车时,我测试了这个,多次接收相同的坐标但是时间戳不同。 iOS 4中我遇到了同样的问题。 5。

这怎么可能?或者我该如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

iPhone可以通过几种方式获得它的位置。

  • 细胞信号
  • wifi接入点
  • GPS卫星

最快的位置查找是单元信号位置。只要你最近有数据,大多数本地塔都将被缓存。电池塔精度可在500米至1500米或更高范围内。

第二快,如果你有数据连接或最近在该区域是wifi查找。这将提供非常准确的位置。需要注意的是,你必须在wifi周围并拥有良好的数据信号。

最慢的是GPS。 iPhone中的GPS是a GPS。它使用来自手机信号塔位置的数据来更好地修复您的位置。如果手机没有数据连接并且不在wifi附近,则需要2到4分钟才能获得修复。使用手机信息塔信息可能需要30秒。

来自apple docs:

  

在请求高精度位置数据时,位置服务提供的初始事件可能没有您请求的准确性。定位服务尽快提供初始事件。然后,它会继续以您请求的准确度确定位置,并在数据可用时根据需要提供其他事件。

在车内,你不太可能在wifi附近,并且可能需要等待更长时间才能锁定GPS。如果locationManager认为您仍然在前一个位置的范围内,则可能会导致旧的坐标具有不同的时间戳。

检查数据的水平准确度以及时间戳,以确定该位置是否与您请求的一样准确。

答案 1 :(得分:0)

Cllocation manager默认情况下将位置更新为

locationManager.distanceFilter = kCLDistanceFilterNone;

这就是你获得重复坐标的原因。实际上,即使海拔高度发生变化,它也会经常更新细节。

你最好设置

locationManager.distanceFilter = 4.0f; 

//只有当您从当前位置每隔4米移动一次时,才会发送新的位置更新详细信息。