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

wja*_*ans 5 cllocationmanager cllocation ios

我在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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

jac*_*ash 1

iPhone 获取位置的方式有多种。

  • 细胞信号
  • 无线网络接入点
  • GPS卫星

最快的位置查找是小区信号定位。只要您最近有数据,大多数本地塔都会被缓存。蜂窝塔精度范围可以从 500m 到 1500m 甚至更高。

第二快的方法是 Wi-Fi 查找,前提是您有数据连接或最近去过该区域。这将提供非常准确的位置。需要注意的是,你必须有 wifi 并且有良好的数据信号。

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

来自苹果文档:

当请求高精度位置数据时,定位服务提供的初始事件可能不具有您所请求的精度。定位服务会尽快传送初始事件。然后,它会继续按照您请求的精度确定位置,并在数据可用时根据需要提供其他事件。

在车内,您不太可能靠近 WiFi 位置,并且可能需要等待更长时间才能锁定 GPS。如果位置管理器认为您仍在先前位置的范围内,这可能会导致旧坐标具有不同的时间戳。

检查数据的 Horizo​​ntalAccuracy 以及时间戳,以确定位置是否如您所要求的那样准确。