본문 바로가기
프로그래밍/iOS

위치정보(GPS)

by 백룡화검 2011. 6. 3.

위치정보는 CLLocation과 CLLocationManager 두개의 클래스에서 관리가 된다.

CLLocationManager에게 정보를 요청하면 CLLocation 인스턴스에 정보를 담아서 알려준다.

정보를 알려줄 때는 CLLocationManagerDelegate 프로토콜의 locationManager:didUpdateToLocation:fromLocation 메서드를 통해서 알려주므로 위치정보를 알고자 하는 클래스에서 이 프로토콜을 따르도록 해주고 해당 메서드를 구현해주어야 한다. ( 오류발생시에는 locationManager:didFailWithError: 메서드로 통보해준다. )

 

구현 절차를 보면,

 

1. 코어 로케이션 프레임워크가 기본적으로 포함되어 있지 않으므로, 코어 로케이션 프레임워크를 프로젝트에 포함시킨다.

위치 : /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhone OS2.0.sdk/System/Library/Frameworks

 

2. 헤더파일 두개를 포함시킨다.

#import <CoreLocation/CoreLocation.h>

#import <CoreLocation/CLLocationManagerDelegate.h>

 

3. CLLocationManagerDelegate 프로토콜을 따른다고 선언해준다.

 

@interface MyClass : ParentClass <CLLocationManagerDelegate> {

...

}

...

@end

 

4. CLLocationManager 객체를 생성하여 델리게이트를 지정해주고 속성을 설정한다.

 

CLLocationManager* locationManager = [[CLLocationManager alloc] init];

locationManager.delegate = MyClass객체;

locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 감도를 설정하는 부분인데, 이 상수가 가장 정밀한 감도를 뜻한다.

locationManager.distanceFilter = 1000.f // 위치변경시마다 델리게이트 메서드로 통보가 오는데, 이 속성을 설정하게 되면 이 값이 기준이 되어 이 거리만큼을 벗어나게 되면 통보받게 된다.

 

5. GPS가 활성상태인지 확인

 

if ( ! [locationManager locationServicesEnabled] ) {

// 활성상태가 아님을 뜻한다.

}

 

6. MyClass에서 위치정보를 통보받기 위해 locationManager:didUpdateToLocation:fromLocation: 메서드를 구현해준다.

 

- (void) locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation {

// newLocation 객체에 현재 위치정보가 담겨져있고, 이전위치가 필요한 경우에는 oldLocation 객체를 활용한다.

}

 

 

7. MyClass에서 오류정보를 통보받기 위해 locationManager:didFailWithError: 메서드를 구현해준다.

 

- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error {

// error 객체로 오류정보가 넘어온다.

}

 

8. 이러한 기능을 활성/비활성 시키는 메서드

 

[locationManager startUpdatingLocation]; // 동작시작

[locationManager stopUpdatingLocation]; // 동작중단

 

 

8. 다 쓴 후 객체 해제를 해준다.

 

[locationManager release];