CLOSE SEARCH

위치, 방향 그리고 CoreLocation

CoreLocation 프레임워크는 현재 위치에 대한 정보를 제공해준다. 그 중에서도 중요한 역활을 하는 CLLocationManager 클래스는 iOS 2.0 이상의 디바이스에서 현재 위치와 방향에 대한 이벤트를 제공하고 관련 작업을 지원해 주는 클래스이다. 주요 기능들을 살펴보면

  • 정확도를 지정하여 사용자의 현재 위치 변화를 추적할 수 있다.
  • 디바이스에 내장된 나침반을 통해 방향의 변화를 감지하고 해당 정보를 얻어올 수 있다.
  • 사용자가 특정 지역으로 들어가거나 나오는 상황을 감지할 수 있다.

일부 정보의 경우 디바이스에 해당 정보를 얻거나 감시하는데 필요한 하드웨어를 내장하고 있어야 하며, CLLocationManager 클래스에서 이를 확인하는 메소드들을 제공하고 있다. 또한 이들 하드웨어는 전력을 많이 소비하므로 반드시 필요한 경우에만 활성화시켜야 한다.

  1. CLLocationManager를 이용하는 일반적인 순서는 아래와 같다.
  2. 해당 기능을 사용하기 전에 디바이스 지원 여부와 CLLocationManager 클래스에서 제공하는 메소드를 통해 해당 기능 사용 가능여부를 확인하고, 사용이 불가한 경우 작업을 취소한다.
  3. CLLocationMananger 클래스의 인스턴스를 생성한다.
  4. 델리게이트(CLLocationManagerDelegate)를 설정한다.
  5. 사용하고자 하는 기능과 관련된 속성들을 설정한다.
  6. 해당 기능과 관련된 시작 메소드를 호출하여 이벤트를 수신한다.


사용자의 현재 위치 정보

기본 위치 서비스를 사용하는 경우에는, 위치 데이터의 정확도를 설정하거나 위치 변경에 따른 이벤트를 사용할 수 있다. 모든 버전의  iOS와 Mac OSX 10.6 이상에서 사용할 수 있다.
– (void)startUpdatingLocation 메소드를 호출하면 desiredAccuracy, destanceFilter 속성 값에 따라 새로운 위치 이벤트가 생성된다. 기본 위치 서비스는 네이게이션 어플리케이션이나 연속적인 위치 기반 데이터를 필요로 하는 어플리케이션에 가장 적합한 서비스이지만, 오랜 시간 사용하게 될 경우 많은 전력을 소모하게 된다.

반대로 – (void)startMonitoringSignificantLocationChanges 메소드를 호출해서 특정 위치 변화에 대한 이벤트만 요청할 수도 있는데, 이 경우에는 기본적인 방식에 비해 사용할 수 있는 옵션은 제한적이지만 전력소모량이 상당히 감소하고 어플리케이션이 실행중이 아닌 경우에는 위치 변화 이벤트를 수신할 수 있다.

위의 두가지 방식 하나만을 사용하거나 모두 사용하는 경우에 관계없이 위치 데이터는 항상 설정된 델리게이트 객체로 전달된다. 위치 데이터 초기화에는 약간의 시간이 소요되기 때문에 초기화 직후에는 이전에 캐시된 위치 데이터와 현재의 위치 데이터가 함께 전달된다. 그러므로 위치 데이터를 사용하기 전에 타임스탬프를 확인해 보는 것이 좋다.

 

특정 지역 모니터링

iOS 4.0 이상에서는 특정 좌표로 표현된 지역을 모니터링 할 수 있는 Region monitoring service를 사용할 수 있다. – (void)startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy 메소드를 통해 특정 지역을 등록하면 Location  Manager가 해당 지역으로의 이동을 추적하고, 델리게이트로 관련된 데이터를 전달한다. 이 데이터를 이용해서 특정 지역에 진입할 경우 사용자에게 알림을 보내는 기능을 구현할 수 있다.

어플리케이션이 백그라운드 상태에서 실행이 중지된 경우라도, 등록된 지역에 진입하여 이벤트가 발생한 경우 시스템이 자동으로 어플리케이션을 실행상태로 변경해서 해당 이벤트를 처리한다. monitoredRegions 속성을 통해 모니터링 중인 지역 정보를 확인할 수 있다.

Region monitoring service는 Mac OSX나 특정 디바이스에서는 사용할 수 없기 때문에 사용전에 regionMonitoringAvailable, regionMonitoringEnabled 속성을 통해 사용가능 여부를 확인해보아야 한다.

 

Heading-Related 서비스

하드웨어 나침반을 내장하고 있는 iOS 기반 디바이스에서는 현재 사용자가 이동하고 있는 방향에 관련된 정보도 사용할 수 있는데, 사용 가능 여부는 headingAvailable 속성을 통해 확인할 수 있다. – (void)startUpdatingHeading 메소드를 호출하면 방향 관련 정보가 설정된 델리게이트로 전달된다. 위치 서비스와 함께 사용하는 경우에는 실제 방향과 기수 자방위 값이 모두 전달되고, 위치 서비스를 사용하지 않는 경우에는 기수 자방위 값만 전달된다.

 

CLLocationManagerDelegate

Filed under: iOS

  1. 꼼시
    많이 알아갑니다 감사합니다