GPS가 정의 된 영역에 들어갈 때 모든 지오 펜스가 트리거됩니다. 처음에는 반경 때문에 반경이 있다고 생각했지만 동일한 문제가 발생했습니다.내 모든 지오 펜스에 대해 EnEnterRegion이 실행되었습니다.
import UIKit
import CoreLocation
class itemDesc {
var title: String
var coordinate: CLLocationCoordinate2D
var regionRadius: CLLocationDistance
var location: String
var type: String
init(title: String, coordinate: CLLocationCoordinate2D, regionRadius: CLLocationDistance, location: String, type: String) {
self.title = title
self.coordinate = coordinate
self.regionRadius = regionRadius
self.location = location
self.type = type
}
}
class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
setupData()
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
}
func locationManager(manager: CLLocationManager, monitoringDidFailForRegion region: CLRegion?, withError error: NSError) {
print("Monitoring failed for region with identifier: \(region!.identifier)")
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("Location Manager failed with the following error: \(error)")
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
func handleRegionEvent(region: CLRegion!) {
print("Geofence triggered \(region.identifier)")
}
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
if region is CLCircularRegion {
handleRegionEvent(region)
}
}
func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) {
if region is CLCircularRegion {
}
}
func setupData(){
if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion.self) {
let itemRegion = [
itemDesc(title: "DOOR", coordinate: CLLocationCoordinate2DMake(00.497699, 00.575095), regionRadius: 0.5, location: "DOOR", type: "exterior"),
itemDesc(title: "BARN FRONT", coordinate: CLLocationCoordinate2DMake(00.49751, 00.575149), regionRadius: 0.5, location:"BARN FRONT", type: "exterior"),
itemDesc(title: "GRASS", coordinate: CLLocationCoordinate2DMake(00.497337, 00.575069), regionRadius: 0.5, location: "GRASS ", type: "nature")]
for item in itemRegion {
let coordinate = item.coordinate
let regionRadius = item.regionRadius
let title = item.title
let region = CLCircularRegion(center: coordinate, radius: regionRadius, identifier: title)
locationManager.startMonitoringForRegion(region)
}
} else{
print("system can't track regions")
}
}
}
사용 (0.497337, 0.575069) 난 단지 이런 일이되지, 잔디 울타리가 트리거 될 기대.
출력 :
regionRadius = 1.0
locations = 37.33233141 -122.0312186 locations = 37.33233141 -122.0312186 locations = 0.497337 0.575069 Geofence triggered BARN FRONT Geofence triggered DOOR Geofence triggered GRASS
regionRadius = 0.5
0
에도 1m에서이 문제가 없었을 하겠지만 :
네번째 소수점은 m
(11)에 제 소수점 가치가 최대 가치가 1.1 m
행소수점 이하 6 번째 자리는 0.11m까지입니다.