10. 위치기반서비스
시작하면서 2 목차 위치정보출력 요구기준에의한위치정보조회 지오코딩 MapView와 MapActivity Maps API 키발급
위치정보출력
위치정보출력 4 위치정보제공 GPS 무선 LAN 이동통신망 위치기반서비스 android.location 패키지 휴대단말의위치를얻기위한클래스를포함 위치정보는지리적좌표 ( 위도와경도 ) 사용 위치정보와주소정보를변환하는 Geocoder 클래스제공 Google Maps 외부라이브러리 com.google.android.maps 지도를표시하거나접근 LocationManager 클래스 위치기반서비스에서가장중요한시스템서비스 위치기반서비스를위한 API 제공 AVD 를통한위치기반서비스개발시 실제로 GPS 로부터위도와경도좌표를받지못함 가상적으로 DDMS 에서위도와경도좌표설정
위치정보출력 5 관렦메소드 LocationManager locationmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); List<String> providers = locationmanager.getproviders(true); 실습단계 시스템서비스설정 위치정보제공자얻기 위치변경조건이발생할때마다통지될액티비티로현액티비티를지정 최근위치정보가져옴 위치정보접근허가필요 <uses-permission android:name="android.permission.access_fine_loc ATION"/>
위치정보출력실습 6 < 실습 10-1> 좌표정보출력 BasicLocDemo 프로젝트를생성 < 코드 10-1> 을 main.xml에복사 < 코드 10-2> 로 AndroidManifest.xml을수정 < 코드 10-3>~< 코드 10-4> 를 BasicLocDemo.java에복사 좌표값입력방법 DDMS를선택후, Emulator Control-Location Controls로이동 [ 그림 10-1]: 위도값 37.422006, 경도값 (longitude) -122.084095을입력 안드로이드 2.2로실행
위치정보출력실습 7
요구기준에의한위치정보조회
요구기준에의한좌표정보조회 9 안드로이드는다양한위치정보제공자를제공 개발자들은자신의요구기준에적합한위치정보를제공받을수있음 Criteria 클래스 개발자들이다양한위치정보제공자중에서자신에적합한제공자를선택할수있는기능제공 Criteria 클래스를통해위치정보와관렦된설정후 위치정보의정밀도수준, 고도정보, 방위정보, 비용발생여부, 젂력소모량의수준등관렦기준을설정 안드로이드는최적의위치정보제공자반환
요구기준에의한좌표조회실습 10 < 실습 10-2> 요구기준에의한좌표정보출력 CriteriaLocDemo 프로젝트생성 < 코드 10-5> 를 main.xml 에복사 < 코드 10-2> 로 AndroidManifest.xml 을수정 < 코드 10-6>~< 코드 10-7> 을 CriteriaLocDemo.java 에복사 DDMS 를선택후, Emulator Control-Location Controls 로이동 위도값 37.422006, 경도값 (longitude) -122.084095 을입력 안드로이드 2.2 로실행 <uses-permission android:name="android.permission.access_fine_loc ATION"/>
지오코딩
지오코딩 (Geocoding) 12 위도와경도의지리적좌표와거리주소 street address 또는우편번호와같은문자적위치정보로상호변환하는과정 역방향지오코딩Reverse geocoding 지리적좌표인위도및경도를문자적위치정보로변환 순방향지오코딩Forward geocoding 문자적위치정보 ( 거리주소, 우편번호등 ) 를위도및경도좌표로변환 관렦메소드 Geocoder gc = new Geocoder(this, Locale.getDefault()); List<Address> addresses = gc.getfromlocation(lat, lng, 1);
역방향지오코딩실습 13 < 실습 10-3> 역방향지오코딩실습 RevGeoDemo 프로젝트생성 < 코드 10-8> 을 main.xml 에복사 < 코드 10-2> 로 AndroidManifest.xml 을수정 < 코드 10-9>~< 코드 10-11> 을 RevGeoDemo.java 에복사 DDMS 를선택후, Emulator Control-Location Controls 로이동 [ 그림 10-1]: 위도값 37.422006, 경도값 (longitude) -122.084095 을입력 Google API 2.1 로실행 <uses-permission android:name="android.permission.access_fine_locatio N"/>
14 순방향지오코딩 (Forward Geocoding) 개념 일상적으로위치를표현하는명칭들 지역명 : 대한민국부산광역시 주소 : 서울시종로구청와대로 1 우편번호 : 302-789 코드 : ICN ( 인천국제공항 ) 문자적위치정보를지리적좌표정보로변환 관렦메소드 List<Address> geocoderesults = coder.getfromlocationname(placename, 3);
순방향지오코딩실습 15 < 실습 10-4> 순방향지오코딩실습 ForGeoLocDemo 프로젝트생성 < 코드 10-12> 를 geoaddress.xml에복사 < 코드 10-2> 로 AndroidManifest.xml을수정 < 코드 10-13>~< 코드 10-14> 를 ForGeoLocDemo.java에복사 DDMS를선택후, Emulator Control-Location Controls로이동 [ 그림 10-1]: 위도값 37.422006, 경도값 (longitude) -122.084095을입력 Google API 2.1로실행 <uses-permission android:name= "android.permission.access_fine_location"/>
순방향지오코딩실습 16
MAPVIEW 와 MAPACTIVITY
Mapview 와 MapActivity 18 지도기반의애플리케이션작성시 MapActivity 를사용하는것이편리 지도가들어가는부분에 com.google.android.mapview 요소를추가 관렦메소드 MapView mymapview = (MapView)findViewById(R.id.myMapView); mapcontroller = mymapview.getcontroller(); mymapview.setsatellite(true); mymapview.setstreetview(true); mymapview.displayzoomcontrols(false); Double geolat = location.getlatitude()*1e6; Double geolng = location.getlongitude()*1e6; GeoPoint point = new GeoPoint(geoLat.intValue(), geolng.intvalue()); mapcontroller.animateto(point);
Mapview 와 MapActivity 19 지도라이브러리를포함 <uses-library android:name="com.google.android.maps" /> 인터넷사용및지도접근을위한정밀도설정 <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.access_coarse_location" /> main.xml 에 Mapview 와관렦된조건을지정 android:apikey 조건은구글지도사용시필요한 API 키를지정 android:enabled="true" android:clickable="true" android:apikey="0et1yzdnw8p9huv9o_t-yfewvcxdfqvhzsxdqcw
Mapview 와 MapActivity 실습 20 < 실습 10-5> 좌표, 주소, 지도출력 MapViewLocDemo 프로젝트생성 < 코드 10-15> 를 main.xml에복사 < 코드 10-16> 로 AndroidManifest.xml을수정 < 코드 10-17>~< 코드 10-19> 를 MapViewLocDemo.java에복사 DDMS를선택후, Emulator Control-Location Controls로이동 [ 그림 10-1]: 위도값 37.422006, 경도값 (longitude) -122.084095을입력 Google API[ 안드로이드 2.1] 로실행
Maps API 키발급 21 구글지도를사용하려면안드로이드지도 API 키필요 먼저 MD5 지문획득 진행젃차 1 편의상 C:/Program Files/Java/jre1.60_03/bin/ 밑에있는 keytool.ex e 파일과 jli.dll 파일을 C:/Document and Settings/user/ 로복사한다. 2 편의상 C:/Document and Settings/user/.android/ 밑에있는 debu g.keystore 파일을 C:/ 밑으로복사한다. 3 다음에 C:/Document and Settings/user/ 에있는 keytool.exe 파일을다음과같이실행한다. C:/Document and Settings/user>keytool -list -alias androiddebugkey -ke ystore C:/debug.keystore -storepass android -keypass android
Maps API 키발급 22 4 [ 그림 10-7] 과같이 MD5 지문이출력. MD5 지문은두개의문자와 : 로구성된문자열패턴 예 ) 7F:8F:7A:04:1E:E7:D3:E9:F7:5A:60:37:FA:1A:7B:BB 5 구글사이트 (www.google.com) 에가서자신의계정을만들고로그인한다음, http://code.google.com/android/maps-api-signup.html 에 MD5 지문을입력하면 API Key 가생성됨 6 생성된 API Key 를다음과같이 main.xml 파일의 android:apikey 속성에복사 <com.google.android.maps.mapview android:id="@+id/mymapview" android:enabled="true" android:clickable="true" android:apikey="0a1nyi... B0Dt-Q" <-- 여기에 apikey 복사입력 /> Google 지도서비스를이용하면됨.
Maps API 키발급 23