티스토리 뷰

Tech/iOS

iOS CoreLocation 위치 파악하기

Ellie Kim 2018. 8. 31. 20:34

해당 유저의 좌표를 받아 날씨를 파악하여 날씨 기반 추천서비스 앱을 만들고 있어서 CoreLocation에 대해서 복습 겸 다시 공부를 하려합니다. 역시 iOS 공부는 개발 문서(developer documentation)를 살펴보는 게 최고인 것 같아요 !


먼저 CoreLocation이란 

CoreLocation은 주변 아이비컨과 관련된 지리적 위치 서비스를 제공합니다.

CoreLocation가 실행되면 위와 같이 승인 요청 Alert메시지가 뜨고 승인한 경우 수행이 됩니다.


(CoreLocation로 기기의 위치데이터를 받기 전 반드시 승인 요청을 확인합니다.)



CLLocationManager클래스는 위치 관련 이벤트를 앱에 시작하고 중지하는데 사용하는 오브젝트이며,CLLocationManagerDelegate프로토콜은 location manager객체에 연관된 이벤트를 파악할때 사용합니다.


사용하기


사용할 곳에 import CoreLocation을 선언해줍니다.


사용하려는 클래스에 CLLocationManagerDelegate를 선언해주어 아래의 CLLocationManager인스턴스인 locationManager의 이벤트를 파악합니다.


 

CLLocationManager클래스의 인스턴스 locationManager를 만들어줍니다.


viewDidLoad()메소드에 locationManager.delegate = self로 델리게이트를 연결해주고, CLLocationManager의 인스턴스 프로퍼티인 desiredAccuracy를 사용해 현재 위치한 데이터를 수신합니다. (* desiredAccuracy - 위치 데이터의 정확도로 iOS와 mac OS는 디폴트 값이 KCLLocationAccuracyBest이고 watchOS는 디폴트 값이 KCLLocationAccuracyhundredMeters입니다.) 앱이 화면상에 나와있을 동안 위치정보에 대한 승인허가를 받기 위해 locationManager.requestWhenInUseAuthorization()메소드를 호출해줍니다. 마지막으로 locationManager.startUpdationLocation()를 호출하여 사용자의 현재 위치에 대해 업데이트를 시작합니다. 이 메소드는 즉각적으로 리턴해줍니다.


여기까지는 값을 받기 위한 준비를 했다면 실제 값을 받게되면 CLLocationManagerDelegate프로토콜의 func  locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 메소드가 실행됩니다. 메서드의 파라미터로 manager, location을 가집니다.


manager는 locationMager객체를 말하고, locations는 위치데이터값인 CLLocation의 배열이 들어옵니다. 이 배열은 현재의 마지막 위치에 대한 데이터를 포함하고 있습니다. 데이터를 전송하기전에 여러개의 위치에 대한 정보가 저장될 수 있기 때문에 배열로 전달되고, 가장 최근의 위치가 배열의 가장 끝에 오게됩니다.


저는 locationManager로 받은 locations 배열을 let location = locations[locations.count - 1이렇게 해주어 가장 최근 업데이트 위치 데이터를 꺼내어 위도와 경도를 파악해 사용했습니다.


* 참고 
self.locationManager.stopUpdatingLocation() 값이 전달되었으면 stopUpdatingLocation()메소드를 호출해서 불필요한 위치 데이터 업데이트는 멈추게 해주는것이 좋다고 합니다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함