如何使用CLCircularRegion SWIFT设置区域?地理围栏

时间:2018-08-27 08:23:43

标签: ios swift core-location latitude-longitude

我正在使用SWIFT上的CoreLocation,并且想要创建一个地理区域,在该区域中可以查看用户是否位于正确的位置。例如,如果用户位于此坐标:Lat: 44.8856828 and Lon: -93.2131653。我想在他周围设置200米的区域,以确保数据正确无误,并且用户可以使用200-meter区域来签入该地方的任何部分。这是我在代码中所要做的!

override func viewDidLoad() {
    latLabel.text = latStore
    lonLabel.text = lonStore
    readData()
    regionLocation()
}

//Accessing the are around the user

func regionLocation() {
    locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.requestAlwaysAuthorization()
}

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
    print("You enter the place")
}

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
    print("Your exit the place")
}

func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
    print("Start monitoring")
    locationManager.requestAlwaysAuthorization()

    let currentRegion = CLCircularRegion(center: (locationManager.location?.coordinate)!, radius: 200, identifier: "Place")
    locationManager.startMonitoring(for: currentRegion)
}

1 个答案:

答案 0 :(得分:0)

您实际上没有在任何地方开始监视。您请求授权,但实际上不处理该请求的成功(或失败!)。

您可以(部分)通过监视授权成功来做到这一点:

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    if(status == .authorizedAlways) {
        let currentRegion = CLCircularRegion(center: (locationManager.location?.coordinate)!, radius: 200, identifier: "Place")
        locationManager.startMonitoring(for: currentRegion)
    }
}

但是,这不能解决您已经获得授权的情况。您确实应该在请求授权之前检查当前授权状态。

您也确实不想在didStartMonitoring内部请求授权,而从startMonitoring内部呼叫didStartMonitoring可能会很快导致精神错乱:)