프로그래밍/Windows Phone7

Windows Phone 7의 위치정보(LBS) API 분석

Terry Cho 2010. 8. 12. 15:56

요즘 스마트폰은 기본 요소가 GPS 기반의 위치 정보를 제공함으로써, LBS (Location Based Service)를 제공하게 하는건데, 당근 윈폰7도 API를 제공한다. 그런데 약간 특이한데, 일단 한번 살펴보자


GPS뿐만 아니라, cellphone과 radio를 지원

GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Low);

위치 정보를 가지고 오는 Class는 위와 같다. GeoGoodinateWatcher를 사용하는데, 재미있는것중 하나가 안에 생성자에 들어가는 GeoPostionAccuracy.Low와 High라는 값이다.
윈폰7의 기기 요건은 GPS 필수 장착과 라디오 필수 장착 요건이 있다.
GPS를 이용한 위치 추적은 정확도는 높으나 기본적으로 배터리 소모가 높다. 반대로 전화 기지국을 통한 위치 추적이나, 라디오를 이용한(이건 원리를 아직 잘 모르겠는데.) 위치 추적은 정확도는 낮지만 전력 소모량이 낮다.
윈폰7에서는 이걸 용도에 맞게 선택해준다는 말씀, Low로 설정하면 라디오나 기지국 기반의 위치 추적을, High는 GPS기반의 위치 추적을 이용한다.

이동시에 위치 변화 감지 방법
윈도우 플랫폼 답게 현재 위치가 변하는 것에 대해서는 이벤트를 발생 시켜서 이벤트 핸들러에서 처리하게 한다. 이때, 위치가 변하는 기준(즉 원래 위치에서 얼마나 움직였을때 위치가 변화한것으로 판단하냐)를 MovementThreadHold로 설정할 수 있다.

위의 예제는 20m로 설정한 예이다.
실제 개발자 가이드에서도 보면 MovementThreshold를 20m 이상으로 설정하게 되어 있다. GPS 자체가 노이즈에 민감하게 반응하고, 더군다나 외장 GPS 안테나를 가지고 있지 않기 때문에, 20m 가 적정값이라는 거다.. (3~4m 내외로 정확하면 좋겠다는 아쉬움이)
 

위치가 바뀌었을때, 이벤트를 받아서 처리하는 함수는 위와 같이 PostionChanged에 EventHandler를 지정해주면 된다. StatusChanged 이벤트는 GPS의 상태가 바뀌었을때, 예를 들어 수신 불능 상태, 수신 가능 상태, 준비중 등 일때 사용할 수 있다.

아마다 MovementThreshold의 값은 하드웨어 제조사의 GPS 감도에 따라서 차이가 있을 수 있을것 같고, 사실 흥미로운 것은 GPS가 불가능한 지역이나 날씨에서도 기지국이나 특히 라디오를 이용해서 위치 정보를 추적할 수 있다는 것이다.




그리드형