【问题标题】:Shorter time interval for location updates位置更新的时间间隔更短
【发布时间】:2018-03-01 00:25:44
【问题描述】:

我的应用高度基于CLLocation 时间戳。我发现CLLocationManager 每隔约 1 秒更新一次位置。这对我的应用程序来说还不够。是否可以配置CLLocationManager 以更短的时间间隔更新位置,或者我应该寻找其他方法(计时器+手动询问位置)?

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.allowsBackgroundLocationUpdates = true
locationManager.distanceFilter = kCLDistanceFilterNone
if #available(iOS 11.0, *) {
    locationManager.showsBackgroundLocationIndicator = true
}
locationManager.startUpdatingLocation()

计时器 + requestLocation() 不起作用。

【问题讨论】:

    标签: ios swift gps core-location


    【解决方案1】:

    您无法更改更新频率。但你可能不需要那个。您可以使用CMMotionManager框架计算手机位置,您可以使用CLLocationManager框架获取用户位置。

    使用accelerometer 计算设备移动。从didAccelerate method 可以得到xyz 的移动,因此通过将其应用于检测到的用户位置,您可以计算新的设备位置。

    希望这会有所帮助,祝你好运。

    【讨论】:

    • 能否提供计算位移的代码。
    • 抱歉,我不知道如何使用accelerometer 来计算 GPS 坐标。我需要坐标来检查手机何时位于特定位置。我需要尽快检查。一秒钟的精度是不够的。
    • 无论如何谢谢你的回答。我会检查我可以用accelerometer 做什么。也许会有所帮助。
    • 我做了一些研究,发现了这个视频youtube.com/watch?v=6M6wSLD-8M8。它看起来很有希望,但我认为实施起来会很复杂。谢谢
    • 加速度计数据通常非常嘈杂,无法根据加速度值计算位移,您需要一些非常复杂的信号处理才能从中获得有意义的信息。我过去曾尝试过这样做,但失败了:-)
    【解决方案2】:

    您无法更改位置更新的频率。仅当超过 distanceFilter 的值时,位置服务才会更新。 如果要强制更新位置,请尝试更改 distanceFilter 的值(以米为单位,双精度数据类型)。您可以使用 kCLDistanceFilterNone 作为 distanceFilter 的值。 试试看:

    locationManager.distanceFilter = kCLDistanceFilterNone
    

    如果位置或每次移动有任何微小变化,此代码将强制定位服务通知您。

    【讨论】:

    • 正如您在我的帖子中看到的那样,我已经在使用 kCLDistanceFilterNone 。仍有一些时间限制。
    • 这解决了我的问题!谢谢,kCLDistanceFilterNone 提供的更新频率比值 0 高得多。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多