Systemfeld - Profil Markus Schwarz - Java, Core Media, iPhone, iPad, Android, ObjectiveC
Iphone Core location
-
Upload
jihoon-kong -
Category
Documents
-
view
775 -
download
3
Transcript of Iphone Core location
![Page 2: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/2.jpg)
What?
- 코어 로케이션의 종류는 뭐가 있을까?
- 코어 로케이션을 구현하는 데 필요한것들
- Where Am I
![Page 3: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/3.jpg)
Core Location 의 종류
![Page 4: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/4.jpg)
Core Location 의 종류
1.GPS- 여러 위성으로부터 극초단파신호를 수신해 현재 위치를 파악한다.
![Page 5: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/5.jpg)
Core Location 의 종류
1.GPS2.셀타워 삼각측량
- 전화기가 속한 영역의 셀타워 위치를 기반으로 한 계산을 통해 현재 위치를 판단한다.
도시나 셀타워가 촘촘히 서치된 영역에서는 정확도가 떨어진다.
![Page 6: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/6.jpg)
Core Location 의 종류
1.GPS2.셀타워 삼각측량
3. WIFI 위치서비스 (WPS)
- 근처의 와이파이 접근 지점의 맥주소를 이용해 이미 알고있는 서비스 제공자의 대용량 데이터베이스와 서비스 제공자의 서비스 영역을 참조하여 위치를 추측한다.
정확하지 않으며 거리차가 몇마일까지 날수있다.
![Page 7: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/7.jpg)
위치 관리자
코어 로케이션 API를 사용하는 방법은 쉽다.
코어 로케이션 매니저를 선언하고 그에 따른 옵션만 설정해주면된다.
CLLocationManager *locationManager = [[CLLocationManager alloc]init];
![Page 8: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/8.jpg)
위치 관리자
하지만 여기서 이걸 선언한다고 위치 정보를 불러오는것은 아니다.
![Page 9: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/9.jpg)
위치 관리자
하지만 여기서 이걸 선언한다고 위치 정보를 불러오는것은 아니다.
CLLocationManagerDelegate 프로토콜을 따르는 객체를 생성하고 이를 위치 관리자 델리게이트에 대입해야한다.
![Page 10: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/10.jpg)
위치 관리자
하지만 여기서 이걸 선언한다고 위치 정보를 불러오는것은 아니다.
CLLocationManagerDelegate 프로토콜을 따르는 객체를 생성하고 이를 위치 관리자 델리게이트에 대입해야한다.
위치관리자는 위치정보를 사용하거나 위치정보가 변경될때마다 이런 델리게이트 메서드를 호출한다.
![Page 11: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/11.jpg)
원하는 정확도 설정
현재 기기가 알아야할 정보가 일정국가의 도(경기도)나 시(서울) 정도만 아는걸로 충분하다면 굳이 다 보여줄 필요는 없다.
알아야 하는정도만 보여주면 된다.
![Page 12: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/12.jpg)
원하는 정확도 설정
CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest;
![Page 13: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/13.jpg)
원하는 정확도 설정
CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest; locationManager.desireAccuary에 10을 지정하면 10미터 반경 이내의 현재위치를 파악하려한다.
![Page 14: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/14.jpg)
원하는 정확도 설정
CLLocationManager *locationManager = [[CLLocationManager alloc]init]; locationManager .delegate = self;locationManager.desireAccuary = kCLLocationAccuracyBest; locationManager.desireAccuary에 10을 지정하면 10미터 반경 이내의 현재위치를 파악하려한다.
위와 같이 kCLLocationAccuracyBest를 지정하면 코어 로케이션은 현재 사용 가능한 가장 정확한 방식을 사용한다.
![Page 15: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/15.jpg)
원하는 정확도 설정
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](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/16.jpg)
거리 필터의 설정
기본적으로 위치관리자는 기기의 위치가 바뀌었음을 감지할때 마다 이를 델리게이트에게 알린다.
거리필터를 사용함으로써 모든 위치 변화를 알리지 않고 특정범위 이상으로 위치가 변경시만 이를 알리게끔할수있다.
![Page 17: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/17.jpg)
이로써 얻을수있는 장점
거리 필터를 사용함으로써 애플리케이션의 위치 조회를 줄일수가 있다.
![Page 18: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/18.jpg)
그럼 어떻게 사용할까?
거리필터또한 미터단위로 설정한다.
locationManager.distanceFilter = 1000.0f;1000미터 움직일시 위치정보를 가지고 오겟다는 얘기
![Page 19: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/19.jpg)
위치관리자의 사용시작순서
1. 위치 조회를 시작할 준비가 됐을때
![Page 20: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/20.jpg)
필터 없이 기본설정으로 쓸려면?
locationManager.distanceFilter = kCLDistanceFilterNone;
![Page 21: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/21.jpg)
위치관리자의 사용시작순서
1. 위치 조회를 시작할 준비가 됐을때
2. 위치관리자에게 조회를 시작하도록 명령
![Page 22: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/22.jpg)
위치관리자의 사용시작순서
1. 위치 조회를 시작할 준비가 됐을때
2. 위치관리자에게 조회를 시작하도록 명령
3 .위치관리자는 작업을 시작하고 현재위치를 파악한후
![Page 23: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/23.jpg)
위치관리자의 사용시작순서
1. 위치 조회를 시작할 준비가 됐을때
2. 위치관리자에게 조회를 시작하도록 명령
3 .위치관리자는 작업을 시작하고 현재위치를 파악한후
4. 델리게이트 메서드를 호출한다.
![Page 24: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/24.jpg)
위치관리자의 사용시작순서
1. 위치 조회를 시작할 준비가 됐을때
2. 위치관리자에게 조회를 시작하도록 명령
3 .위치관리자는 작업을 시작하고 현재위치를 파악한후
4. 델리게이트 메서드를 호출한다.
5. 작업을 멈추게 하기전까지 위치관리자는 현재 거리 필터범위를 초과하는 위치 변화가 있을때마다 델리게이트 메서드를 계속해서 호출한다.
![Page 25: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/25.jpg)
위치관리자의 사용시작코드
[locationManager startUpdatingLocation];
![Page 26: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/26.jpg)
위치관리자의 현명한 활용법
현재 위치만 판단하고 더이상 위치 정보가 필요 없다면 애플리케이션에서 필요한 정보를 델리게이트 메서드가 받자마자 델리게이트 메서드 내에서 위치관리자 작업을 중단하면된다.
![Page 27: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/27.jpg)
위치관리자의 현명한 활용법
현재 위치만 판단하고 더이상 위치 정보가 필요 없다면 애플리케이션에서 필요한 정보를 델리게이트 메서드가 받자마자 델리게이트 메서드 내에서 위치관리자 작업을 중단하면된다.
그에 반해 지속적인 위치 조회가 필요하다면 가능한 한 빨리 위치조회를 멈추게끔 코드를 작성해야한다.
배터리 때문이다.
![Page 28: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/28.jpg)
위치관리자의 현명한 활용법
위치 관리자가 델리게이트에서 위치 업데이트를 보내지 않게 하려면 다음과 같이 stopUpdatingLocation을 호출하면된다.
[locationManager stopUpdatingLocation];
![Page 29: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/29.jpg)
위치관리자 델리게이트
위치 관리자 델리게이트는 항상 CLLocationManagerDelegate 프로토콜을 따라야 한다.
이 프로토콜에서는 두개의 메서드를 정희하는데 둘다 선택 메서드다.
![Page 30: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/30.jpg)
위치관리자 델리게이트
위치 관리자 델리게이트는 항상 CLLocationManagerDelegate 프로토콜을 따라야 한다.
이 프로토콜에서는 두개의 메서드를 정희하는데 둘다 선택 메서드다.
1.위치관리자가 현재위치를 판단하거나
거리변화가 감지시 호출된다.
![Page 31: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/31.jpg)
위치관리자 델리게이트
위치 관리자 델리게이트는 항상 CLLocationManagerDelegate 프로토콜을 따라야 한다.
이 프로토콜에서는 두개의 메서드를 정희하는데 둘다 선택 메서드다.
1.위치관리자가 현재위치를 판단하거나
거리변화가 감지시 호출된다.
2. 위치관리자가 에러시 호출
![Page 32: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/32.jpg)
위치 업데이트 받기
현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.
이메서드는 세개의 매개변수를 받는다.
![Page 33: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/33.jpg)
위치 업데이트 받기
현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.
이메서드는 세개의 매개변수를 받는다.
1. 이 메서드를 호출한 위치관리자.
![Page 34: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/34.jpg)
위치 업데이트 받기
현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.
이메서드는 세개의 매개변수를 받는다.
1. 이 메서드를 호출한 위치관리자.
2. 기기의 현재위치를 정희한 CLLocation객체.
![Page 35: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/35.jpg)
위치 업데이트 받기
현재 위치를 알려줄떄는 위치관리자가 locationManager:didUpdateToLocation:메서드를 호출한다.
이메서드는 세개의 매개변수를 받는다.
1. 이 메서드를 호출한 위치관리자.
2. 기기의 현재위치를 정희한 CLLocation객체.
3. 마지막 업데이트로부터 가져온 이전위치를 정의한 CLLocation객체
![Page 36: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/36.jpg)
CLLocation을 활용한 위도와 경도
위치관리자는 CLLocation 인스턴스를 사용해 위치정보를 전달한다.
이 클래스에는 애플리케이션을 활용할수 있는 다섯가지 속성이 들어있다.
위도와 경도는 coordinate 라는 속성이 들어있다.
![Page 37: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/37.jpg)
위도와 경도를 각도값으로 구하는 법
위도
CLLocationDegrees latitude = theLocation.coordinate.latitude; 경도
CLLocationDegrees longitude = theLocation.coordinate.longitude;
![Page 38: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/38.jpg)
그외....
수중 깊이
CCLocationDegrees altitude = theLocation.altitude; 수중 깊이나 고도를 무시한 평행선상의 두좌표사이의거리
CCLocationDegrees distance = [fromLocation distanceFromLocation:toLocation];
![Page 39: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/39.jpg)
에러 알림
현재 위치를 알릴수 없을때
locationManager:didFailWithError: 라는 두번쨰 델리게이트 메서드를 호출한다.
이런 에러의 주된 원인은 사용자의 위치정보 사용에 대한 동의를 얻어야 하기떄문이다.
동의를 구하기 위한 alert모달 창을 띄운다.
여기서 거부하면 위치 관리자는 kCLErrorDenied라는 에러코드와 더불어 locationManager:didFailWithError:를 사용해 델리게이트에게 이사실을 알려준다.
![Page 40: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/40.jpg)
(WhereAmI)
소스코딩
![Page 41: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/41.jpg)
WhereAmIViewController.h
![Page 42: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/42.jpg)
WhereAmIViewController.m
![Page 43: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/43.jpg)
WhereAmIViewController.m
![Page 44: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/44.jpg)
DelegateMethod - 위치정보 셋팅
![Page 45: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/45.jpg)
DelgateMethod - 에러 처리
![Page 46: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/46.jpg)
Q&A
![Page 47: Iphone Core location](https://reader034.fdocuments.net/reader034/viewer/2022042607/559af4181a28abb8708b47d2/html5/thumbnails/47.jpg)
감사합니다.