iphone core location

47
Core Location 발표자 : 공지훈 [email protected]

Upload: jihoon-kong

Post on 07-Jul-2015

773 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Iphone Core location

Core Location

발표자 : 공지훈

[email protected]

Page 2: Iphone Core location

What?

- 코어 로케이션의 종류는 뭐가 있을까?

- 코어 로케이션을 구현하는 데 필요한것들

- Where Am I

Page 3: Iphone Core location

Core Location 의 종류

Page 4: Iphone Core location

Core Location 의 종류

1.GPS- 여러 위성으로부터 극초단파신호를 수신해 현재 위치를 파악한다.

Page 5: Iphone Core location

Core Location 의 종류

1.GPS2.셀타워 삼각측량

- 전화기가 속한 영역의 셀타워 위치를 기반으로 한 계산을 통해 현재 위치를 판단한다.

도시나 셀타워가 촘촘히 서치된 영역에서는 정확도가 떨어진다.

Page 6: Iphone Core location

Core Location 의 종류

1.GPS2.셀타워 삼각측량

3. WIFI 위치서비스 (WPS)

- 근처의 와이파이 접근 지점의 맥주소를 이용해 이미 알고있는 서비스 제공자의 대용량 데이터베이스와 서비스 제공자의 서비스 영역을 참조하여 위치를 추측한다.

정확하지 않으며 거리차가 몇마일까지 날수있다.

Page 7: Iphone Core location

위치 관리자

코어 로케이션 API를 사용하는 방법은 쉽다.

코어 로케이션 매니저를 선언하고 그에 따른 옵션만 설정해주면된다.

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

Page 8: Iphone Core location

위치 관리자

하지만 여기서 이걸 선언한다고 위치 정보를 불러오는것은 아니다.

Page 9: Iphone Core location

위치 관리자

하지만 여기서 이걸 선언한다고 위치 정보를 불러오는것은 아니다.

CLLocationManagerDelegate 프로토콜을 따르는 객체를 생성하고 이를 위치 관리자 델리게이트에 대입해야한다.

Page 10: Iphone Core location

위치 관리자

하지만 여기서 이걸 선언한다고 위치 정보를 불러오는것은 아니다.

CLLocationManagerDelegate 프로토콜을 따르는 객체를 생성하고 이를 위치 관리자 델리게이트에 대입해야한다.

위치관리자는 위치정보를 사용하거나 위치정보가 변경될때마다 이런 델리게이트 메서드를 호출한다.

Page 11: Iphone Core location

원하는 정확도 설정

현재 기기가 알아야할 정보가 일정국가의 도(경기도)나 시(서울) 정도만 아는걸로 충분하다면 굳이 다 보여줄 필요는 없다.

알아야 하는정도만 보여주면 된다.

Page 12: Iphone Core location

원하는 정확도 설정

CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest;

Page 13: Iphone Core location

원하는 정확도 설정

CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest; locationManager.desireAccuary에 10을 지정하면 10미터 반경 이내의 현재위치를 파악하려한다.

Page 14: Iphone Core location

원하는 정확도 설정

CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest; locationManager.desireAccuary에 10을 지정하면 10미터 반경 이내의 현재위치를 파악하려한다.

위와 같이 kCLLocationAccuracyBest를 지정하면 코어 로케이션은 현재 사용 가능한 가장 정확한 방식을 사용한다.

Page 15: Iphone Core location

원하는 정확도 설정

CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest; locationManager.desireAccuary에 10을 지정하면 10미터 반경 이내의 현재위치를 파악하려한다.

위와 같이 kCLLocationAccuracyBest를 지정하면 코어 로케이션은 현재 사용 가능한 가장 정확한 방식을 사용한다.

kCLLocationAccuracyBest외에도 kCLLocationAccuracyHundredMeters,

kCLLocationAccuracAccuracyKilomether,kCLLocationAccurayThreeKilometers가 있다.

Page 16: Iphone Core location

거리 필터의 설정

기본적으로 위치관리자는 기기의 위치가 바뀌었음을 감지할때 마다 이를 델리게이트에게 알린다.

거리필터를 사용함으로써 모든 위치 변화를 알리지 않고 특정범위 이상으로 위치가 변경시만 이를 알리게끔할수있다.

Page 17: Iphone Core location

이로써 얻을수있는 장점

거리 필터를 사용함으로써 애플리케이션의 위치 조회를 줄일수가 있다.

Page 18: Iphone Core location

그럼 어떻게 사용할까?

거리필터또한 미터단위로 설정한다.

locationManager.distanceFilter = 1000.0f;1000미터 움직일시 위치정보를 가지고 오겟다는 얘기

Page 19: Iphone Core location

위치관리자의 사용시작순서

1. 위치 조회를 시작할 준비가 됐을때

Page 20: Iphone Core location

필터 없이 기본설정으로 쓸려면?

locationManager.distanceFilter = kCLDistanceFilterNone;

Page 21: Iphone Core location

위치관리자의 사용시작순서

1. 위치 조회를 시작할 준비가 됐을때

2. 위치관리자에게 조회를 시작하도록 명령

Page 22: Iphone Core location

위치관리자의 사용시작순서

1. 위치 조회를 시작할 준비가 됐을때

2. 위치관리자에게 조회를 시작하도록 명령

3 .위치관리자는 작업을 시작하고 현재위치를 파악한후

Page 23: Iphone Core location

위치관리자의 사용시작순서

1. 위치 조회를 시작할 준비가 됐을때

2. 위치관리자에게 조회를 시작하도록 명령

3 .위치관리자는 작업을 시작하고 현재위치를 파악한후

4. 델리게이트 메서드를 호출한다.

Page 24: Iphone Core location

위치관리자의 사용시작순서

1. 위치 조회를 시작할 준비가 됐을때

2. 위치관리자에게 조회를 시작하도록 명령

3 .위치관리자는 작업을 시작하고 현재위치를 파악한후

4. 델리게이트 메서드를 호출한다.

5. 작업을 멈추게 하기전까지 위치관리자는 현재 거리 필터범위를 초과하는 위치 변화가 있을때마다 델리게이트 메서드를 계속해서 호출한다.

Page 25: Iphone Core location

위치관리자의 사용시작코드

[locationManager startUpdatingLocation];

Page 26: Iphone Core location

위치관리자의 현명한 활용법

현재 위치만 판단하고 더이상 위치 정보가 필요 없다면 애플리케이션에서 필요한 정보를 델리게이트 메서드가 받자마자 델리게이트 메서드 내에서 위치관리자 작업을 중단하면된다.

Page 27: Iphone Core location

위치관리자의 현명한 활용법

현재 위치만 판단하고 더이상 위치 정보가 필요 없다면 애플리케이션에서 필요한 정보를 델리게이트 메서드가 받자마자 델리게이트 메서드 내에서 위치관리자 작업을 중단하면된다.

그에 반해 지속적인 위치 조회가 필요하다면 가능한 한 빨리 위치조회를 멈추게끔 코드를 작성해야한다.

배터리 때문이다.

Page 28: Iphone Core location

위치관리자의 현명한 활용법

위치 관리자가 델리게이트에서 위치 업데이트를 보내지 않게 하려면 다음과 같이 stopUpdatingLocation을 호출하면된다.

[locationManager stopUpdatingLocation];

Page 29: Iphone Core location

위치관리자 델리게이트

위치 관리자 델리게이트는 항상 CLLocationManagerDelegate 프로토콜을 따라야 한다.

이 프로토콜에서는 두개의 메서드를 정희하는데 둘다 선택 메서드다.

Page 30: Iphone Core location

위치관리자 델리게이트

위치 관리자 델리게이트는 항상 CLLocationManagerDelegate 프로토콜을 따라야 한다.

이 프로토콜에서는 두개의 메서드를 정희하는데 둘다 선택 메서드다.

1.위치관리자가 현재위치를 판단하거나

거리변화가 감지시 호출된다.

Page 31: Iphone Core location

위치관리자 델리게이트

위치 관리자 델리게이트는 항상 CLLocationManagerDelegate 프로토콜을 따라야 한다.

이 프로토콜에서는 두개의 메서드를 정희하는데 둘다 선택 메서드다.

1.위치관리자가 현재위치를 판단하거나

거리변화가 감지시 호출된다.

2. 위치관리자가 에러시 호출

Page 32: Iphone Core location

위치 업데이트 받기

현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.

이메서드는 세개의 매개변수를 받는다.

Page 33: Iphone Core location

위치 업데이트 받기

현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.

이메서드는 세개의 매개변수를 받는다.

1. 이 메서드를 호출한 위치관리자.

Page 34: Iphone Core location

위치 업데이트 받기

현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.

이메서드는 세개의 매개변수를 받는다.

1. 이 메서드를 호출한 위치관리자.

2. 기기의 현재위치를 정희한 CLLocation객체.

Page 35: Iphone Core location

위치 업데이트 받기

현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.

이메서드는 세개의 매개변수를 받는다.

1. 이 메서드를 호출한 위치관리자.

2. 기기의 현재위치를 정희한 CLLocation객체.

3. 마지막 업데이트로부터 가져온 이전위치를 정의한 CLLocation객체

Page 36: Iphone Core location

CLLocation을 활용한 위도와 경도

위치관리자는 CLLocation 인스턴스를 사용해 위치정보를 전달한다.

이 클래스에는 애플리케이션을 활용할수 있는 다섯가지 속성이 들어있다.

위도와 경도는 coordinate 라는 속성이 들어있다.

Page 37: Iphone Core location

위도와 경도를 각도값으로 구하는 법

위도

CLLocationDegrees latitude = theLocation.coordinate.latitude; 경도

CLLocationDegrees longitude = theLocation.coordinate.longitude;

Page 38: Iphone Core location

그외....

수중 깊이

CCLocationDegrees altitude = theLocation.altitude; 수중 깊이나 고도를 무시한 평행선상의 두좌표사이의거리

CCLocationDegrees distance = [fromLocation distanceFromLocation:toLocation];

Page 39: Iphone Core location

에러 알림

현재 위치를 알릴수 없을때

locationManager:didFailWithError: 라는 두번쨰 델리게이트 메서드를 호출한다.

이런 에러의 주된 원인은 사용자의 위치정보 사용에 대한 동의를 얻어야 하기떄문이다.

동의를 구하기 위한 alert모달 창을 띄운다.

여기서 거부하면 위치 관리자는 kCLErrorDenied라는 에러코드와 더불어 locationManager:didFailWithError:를 사용해 델리게이트에게 이사실을 알려준다.

Page 40: Iphone Core location

(WhereAmI)

소스코딩

Page 41: Iphone Core location

WhereAmIViewController.h

Page 42: Iphone Core location

WhereAmIViewController.m

Page 43: Iphone Core location

WhereAmIViewController.m

Page 44: Iphone Core location

DelegateMethod - 위치정보 셋팅

Page 45: Iphone Core location

DelgateMethod - 에러 처리

Page 46: Iphone Core location

Q&A

Page 47: Iphone Core location

감사합니다.