Android application에서 어떻게 offline map을 활용 할 수 있는 지에 대한 간단한 요약 및 example application에 대해서 설명드리도록 하겠습니다.
개요는 아래와 같습니다 .
- Map(Map 타일) Download
- osmDroid를 활용한 offline MapView 활용
- 참고 site
- Map download
Map을 다운로드 받아 Smart phone에 옮기는 방법을 설명드리도록 하겟습니다.
Android application에서 네트워크 연결 없이 Map을 활용하려면 Open Map들 혹은 Google map으로 부터 지도(지도 타일)을 받아와서 SD Card에 저장한 다음 그 파일들을 사용해야 합니다.
저는 Mobile Atlas Creator 1.9 를 활용해서 Open Street Map Mapnik과 Google Map으로 부터 지도파일을 다운로드 받아서 Application을 제작했습니다. 첨부되어 있는 Mobile Atlas Creator 1.9는 Open Street Map Mapnik로 부터 지도 타일을 받는 버젼입니다. (Google Map으로 부터 지도를 다운로드 받으려면 구글링을 구하시길 권합니다.)
- Mobile Atlas Creator 1.9실행 ( http://mobac.sourceforge.net/ 에서 다운로드)
이 압축을 해제하면 start.sh파일을 실행시켜서 Mobile Atlas Creator 1.9 를 실행 시킴니다.
- format 설정
그후 메뉴창에 있는 Atlas -> Convert Atlas Format 에서 Osmdroid Zip을 선택해 줍니다.
- Map Source 선택
OpenStreetMap Mapnik을 선택합니다(다른 Open map은 안됬었습니다. )
- 다운로드 받을 범위 선택
다운로드 받을 범위를 드래그 해서 선택한후 Zoom Level을 클릭합니다.
- 선택 부분 저장
Atlas Content에서 Add selection을 선택합니다.
- 지도파일 생성
Create atlas를 클릭합니다.
- Android phone으로 지도 파일 복사
Android phone을 컴퓨터에 연결한 후 usb 연결을 통해 windows 탐색기를 이용해서 /sdcard/osmdroid/ 폴더를 만들고 위의 과정에서 생성한 지도파일을 복사해 넣습니다.
이제 지도파일은 준비가 완료되었습니다.
2.osmDroid를 활용한 offline MapView 활용
osmdroid를 활용해서 기존에 android 에서 Google map을 쉽게 사용하라고 제공해주는 MapView를 대체해서 SDcard에 저장되어 있는 지도파일을 사용해서 Android application에서 offline 지도를 사용할 수 있도록 해줍니다.
필요한 파일은 아래와 같으며
- osmdroid 최신 jar 파일 osmdroid-android-3.0.8.jar ,
- SLF4J Android 최신 jar 파일 http://www.slf4j.org/android/slf4j-android-1.6.1-RC1.jar
그리고 프로젝트 property -> build path -> library -> add jar 요로케 추가를 해주고
property -> build path -> order and export 에서 클릭 클릭 해서 빌드 되게 주심니다.
그럼 준비는 완료!
그리고 Project의 내용은 아래와 같이 생성하면 Android application에서 offline지도를 활용할 수 있습니다.
import android.app.Activity;
import android.os.Bundle;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
public class Map_demoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = new MapView(this, 256); //constructor
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapView.setClickable(true);
setContentView(mapView); //displaying the MapView
mapView.getController().setZoom(14); //처음 화면에 보이는 Zoom level
mapView.getController().setCenter(new GeoPoint(37.598864, 126.86483)); //항공대의 위도 경도
mapView.setUseDataConnection(false); //인터넷 연결 금지
}
}
위의 예제 Source는 아래의 android user 권한을 필요로 합니다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
참고 site
offline map을 만드는 tutorial
http://www.haakseth.com/?p=30
Open Street Map site
osmdroid site
http://code.google.com/p/osmdroid/
osmdroid에 대한 android 예제.
http://android-coding.blogspot.kr/2012/06/example-of-implementing-openstreetmap.html
osmdroid에 대한 android 예제.
http://mappingdev.wordpress.com/tag/offline/
osdroid에서의 방법 offline map을 사용하는 방법에 대한 설명
http://stackoverflow.com/questions/8136775/how-can-i-implement-offline-maps-using-osmdroid-by-saving-map-tiles-images-into
OsmDemo(android application)
https://docs.google.com/file/d/0BzFEZqqU7Oz6N2QwZmY4MzItNDdhNS00OWQxLTliYjYtZmIwMjFmMzk1ZjUy/edit?hl=sk#
반갑습니다 덕분에 좋은정보 보고갑니다.
답글삭제다름이 아니라 이부분에 대해 너무 궁금한게 잇어서요
android 폰 안에 sdcard/osmdroid/ 폴더 만들고 안에 layer.osz 파일을 넣어도 offline지도를 못 불러와서 너무 해결이 안되네요 ㅠㅠ 해답좀 얻을수 잇을까요
01089410277 입니다. 연락부탁드립니다 ㅠ