본문 바로가기
개발/안드로이드

안드로이드로 구글맵 다루기 - 1. 전체 구조 이해

by darksilber 2011. 8. 19.
반응형

[출처] 안드로이드로 구글맵 다루기 - 1. 전체 구조 이해|작성자 녹차




Chapter 1. 전체 구조 이해

GPS를 이용한 어플리케이션은 전체 어플리케이션에서 많은 비율을 차지하고 있진 않습니다.

하지만 GPS를 이용하면 상당히 유용한 것을 창조해 낼 수 있습니다.

그러나 GPS를 이용해서 개발을 하려고 보면, 관련된 자료가 얼마 없어서 난항을 겪는 경우가 있습니다. 몇몇 안드로이드 도서에 위치 기반 서비스에 관련해서 소개가 되어 있습니다. 어느 도서는 2~3장만 설명 되어있기도 하고 어느 도서는 나름 10~15장 정도 설명이 되어 있습니다.

처음 접할때 여러 도서를 보면서 터득을 해야 했고

"누군가 체계적으로 정리를 해놨으면 좋았을 텐데..." 하는 마음을 가지게 되었습니다.

그래서 포스트를 작성하게 되었습니다.

먼저 멀리서 숲을 바라보는 기분으로 전체적인 부분을 설명해 보겠습니다.

기기가 GPS 정보를 처리하는 과정은 과연 어떨까요?

1. 위치 기반 서비스 처리의 전체 구조

1) 기기가 GPS 정보를 받습니다.

가장 먼저 기기를 통해서 GPS 정보를 받습니다. 정보는 여러 정보가 포함되있습니다.

기본적으로 위도, 경도, 정확도가 있으며, 부가적인 정보로는 고도, 속도, 방향 등이 있습니다.

대신 부가적인 정보는 비교적 엉터리인 경우가 많습니다.

2) 받은 위치정보를 안드로이드 내부 API를 통해서 Android.location 패키지에 있는 클래스로 가공합니다.

기기에서 받은 위치 정보를 첫번째로 받아 가공하는 단계입니다.

3) 가공된 정보를 구글맵 API를 통해서 재가공합니다.

구글맵의 API에서 사용하는 정보들은 안드로이드 내부 API와 다른 성격을 가집니다. 자세한 내용은 다음 과정에서 보도록 하지요.

4) 재가공된 정보를 구글맵 API를 통해서 스마트폰에 보여줍니다.

2. 안드로이드 내부 API : android.location

안드로이드의 API 문서 위치

: 안드로이드 설치 폴더\docs\reference\classes.html

문서를 보시면 클래스에 대하여 상세하게 나와 있습니다.

내부 API는 총 8개의 클래스와 3개의 인터페이스로 구성되어 있습니다.

인터페이스는 리스너이기 때문에 제외하고 클래스만 살짝 살펴 보도록 합시다.

가장 처음 LocationManager를 보시면 클래스 이름에서 알 수 있듯이

위치 정보를 제공해주는 제공자(LocationProvider)관리 역할을 합니다. 실제 코드에서는 한, 두줄이면 더 이상 쓸일이 없기도 합니다.

Criteria 클래스는 일단 살짝쿵 무시하고,

LocationProvider는 (대부분 GPS) Location 형의 위치 정보를 제공해 줍니다. 이 Location에는 위도, 경도, 정확도, 속도, 고도, 방향 등이 표시 되는데 주로 다루는 건 위도와 경도입니다.

이 위도, 경도를 통해서 Geocoder를 거쳐 주소지(Address)를 얻을 수 있습니다.

하지만 내부 API가 가능한건 여기까지 입니다. 현재 위치를 위도, 경도로 잡고 그 위치를 주소로 표시할 수 있는 영역까지 입니다. 나머지는 구글맵이 담당합니다.

3. 구글맵 API: Com.google.android.maps

구글맵 API 문서의 위치

: 안드로이드 설치 폴더\add-ons

\addon_google_apis_google_inc_8\docs\reference\index.html

구글맵 API에는 10개의 클래스3개의 인터페이스가 존재합니다.

그 중 중요한 클래스들만 위에 표시하였습니다.

구글맵에선 좌표를 Location으로 그대로 사용하지 않습니다. 얘는 너무 많은 정보를 가지고 있지요. 맵에는 위도, 경도만 있으면 장땡입니다. 그래서 그 정보만을 가지고 있는 GeoPoint를 이용합니다.

MapView를 통해 맵이 담긴 뷰를 다루고, MapController를 통해 맵의 줌이나 맵으로 보여줄 위치 등을 지정합니다. 그리고 이 뷰를 표시할 MapActivity를 사용합니다. 보통의 Activity와 거의 유사한 구조를 가지고 있기 때문에 평소 Activity사용하듯 쓰면 됩니다.

그리고 맵에 뭔가를 표시해야 겠지요? 그때는 Overlay를 사용합니다. 포토샵의 레이어 같은 것이지요. 이곳에 원하는 것을 그리거나 붙여주지요.

하지만 Overlay는 그냥 쌩으로 가져다 쓰진 않습니다. 보통 자기가 쓸 오버레이 클래스를 만들고 Overlay를 상속하여 쓰게 됩니다. 구글맵이 자기 위치를 표시하기 쉽게 하기 위해 미리 만들어 놓은 MyLocationOverlay가 그런 경우지요. 겉에만 보는거니까 "레이어 같은걸 여기서 처리하는구나" 하고 이해하시면 됩니다.

그리고 나서 이 API를 이용해서 화면에 표시하는 겁니다.

실제 구글맵이 제공하는건 오직 맵과 도구 만을 제공합니다. 자기 위치를 표시하고

주소지를 표시하고 등 모든 것들은 어플 제작자가 하는 것이죠.

이게 맵을 표현하는 전체적인 구조입니다

 

반응형

댓글