如何使用 CLCircularRegion SWIFT 设置区域?地理围栏
How set a region using CLCircularRegion SWIFT? Geofencing
我在 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)
}
您实际上并没有在任何地方开始监控。您请求授权,但实际上并未处理该请求的成功(或失败!)。
您可以(部分)通过监控授权成功来做到这一点:
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
内部请求授权,从 didStartMonitoring
内部调用 startMonitoring
可能会很快导致精神错乱:)
我在 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)
}
您实际上并没有在任何地方开始监控。您请求授权,但实际上并未处理该请求的成功(或失败!)。
您可以(部分)通过监控授权成功来做到这一点:
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
内部请求授权,从 didStartMonitoring
内部调用 startMonitoring
可能会很快导致精神错乱:)