首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中加快GPS的坐标定位?

如何在Swift中加快GPS的坐标定位?
EN

Stack Overflow用户
提问于 2018-03-06 09:35:52
回答 1查看 3K关注 0票数 7

我是一个初学者,我正在制作一个应用程序,得到用户的协调。我正在制作locationManager类,如下所示

代码语言:javascript
复制
import UIKit
import CoreLocation


class LocationManager: NSObject {
    let manager = CLLocationManager()
    var didGetLocation: ((Coordinate?) -> Void)?

    override init() {
        super.init()

        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestLocation()
    }

    func getPermission() {
        // to ask permission to the user by showing an alert (the alert message is available on info.plist)
        if CLLocationManager.authorizationStatus() == .notDetermined {
            manager.requestWhenInUseAuthorization()
        }

    }
}




extension LocationManager : CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        if status == .authorizedWhenInUse {
            manager.requestLocation()
        }
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error.localizedDescription)
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.first else {
            didGetLocation?(nil)
            return

        }
        let coordinate = Coordinate(location: location)
        if let didGetLocation = didGetLocation {
            didGetLocation(coordinate)

        }
    }
}

private extension Coordinate {
    init(location: CLLocation) {
        latitude = location.coordinate.latitude
        longitude = location.coordinate.longitude
    }
}

我只需调用didGetLocation属性来获取用户坐标位置。上面的代码实际上可以得到坐标数据。但是我认为这需要太多的时间(我在5-7秒后得到了坐标)。

老实说,我是iOS开发中的新手,得到5-7秒左右的坐标位置是正常的吗?我能改进这个吗?

我怀疑是因为我所使用的精确性是kCLLocationAccuracyBest,但是如果我更改为kCLLocationAccuracyHundredMeters,这似乎是一样的。

那么,我能改进这个吗?因为如果我和android相比,得到坐标位置的速度很快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 15:01:12

正如我在我的注释中所说的,如果您使用较小的精度值,让我们说kCLLocationAccuracyThreeKilometers,您应该更早地获得一个有效的位置,但是通常CLLocationManager需要一些时间才能得到一个有效的位置,因为大多数位置管理器任务都是异步运行的。

苹果文档对的看法

声明

代码语言:javascript
复制
var desiredAccuracy: CLLocationAccuracy { get set }

讨论 接收机尽最大努力达到所要求的精度,但实际精度却得不到保证。 您应该为此属性分配一个适合您的使用场景的值。例如,如果您只需要在1公里内指定当前位置,则应该指定kCLLocationAccuracyKilometer而不是kCLLocationAccuracyBestForNavigation以更高的精度确定位置需要更多的时间和更多的功率。 当请求高精度的位置数据时,由位置服务交付的初始事件可能没有所要求的准确性。location服务尽可能快地传递初始事件。然后,它继续以您请求的准确性确定位置,并在有数据可用时,根据需要交付额外的事件。 对于iOS和macOS,此属性的默认值为kCLLocationAccuracyBest。对于watchOS,默认值是kCLLocationAccuracyHundredMeters。 此属性仅与标准位置服务一起使用,在监视重大位置更改时不使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49127564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档