관리 메뉴

moozi

MapView 이용하기 4 - 원하는 위치 이동, 표시 본문

안드로이드개발강좌

MapView 이용하기 4 - 원하는 위치 이동, 표시

moozi 2010. 2. 22. 12:03

이번 강좌에서는 지난 강좌 MapView 이용하기 3 - MapView 띄우기 에서 이어집니다.

지도상에서 원하는 위치로 이동해서 아이콘으로 위치를 표시하는 코드를 추가해 보겠습니다.

이번 강좌 역시 안드로이드 개발자사이트의 내용을 토대로 살펴봅니다.

1. 먼저 다음 아이콘을 다운로드 받아 바탕화면에 저장한 다음 res -> drawable-hdpi 폴더에 끌어다 놓습니다.


[ 아이콘을 res -> drawable-hdpi 폴더에 끌어다 놓은 모습 ]


2. src 폴더 -> my.HelloMyMap 에서 마우스 오른쪽버튼 클릭 -> New -> Class 를 클릭해서 다음과 같이 새 HelloItemizedOverlay.java파일을 추가합니다. 빨간색 박스 부분을 주목해 보시기 바랍니다.



3. HelloItemizedOverlay.java 를 다음과 같이 편집합니다.

package my.HelloMyMap;

import java.util.ArrayList;

import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class HelloItemizedOverlay extends ItemizedOverlay {

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 
 public HelloItemizedOverlay(Drawable defaultMarker) {
  super(boundCenterBottom(defaultMarker));
  // TODO Auto-generated constructor stub
 }

 @Override
 protected OverlayItem createItem(int i) {
  // TODO Auto-generated method stub
  return mOverlays.get(i);
 }

 @Override
 public int size() {
  // TODO Auto-generated method stub
  return  mOverlays.size();
 }
 
 public void addOverlay(OverlayItem overlay) {
     mOverlays.add(overlay);
     populate();
 }

}

코드를 살펴보면 HelloItemizedOverlay  클래스는 ItemizedOverlay 클래스를 상속받습니다.
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
에서 OverlayItem들을 저장할 ArrayList인 mOverlays 객체를 생성합니다.

boundCenterBottom() 은 아이콘의 아래의 중간부분이 좌표에 위치하도록 지정합니다.

 populate(); 는 add()메서드가 호출될 때마다 호출해야 하는데, 각각의 OverlayItem 들을 읽어서 그려낼 준비를 하는 역할을 합니다.


4. HelloMyMap.java 를 다음과 같이 편집합니다.

package my.HelloMyMap;

import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.ZoomControls;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class HelloMyMap extends MapActivity {
 
 List<Overlay> mapOverlays;
 Drawable drawable;
 HelloItemizedOverlay itemizedOverlay;
 LinearLayout linearLayout;
 MapView mapView;
 ZoomControls mZoom;
   
 @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
 
/** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapView.setSatellite(true);

        GeoPoint p=new GeoPoint(37450877,126768494);
        MapController mc=mapView.getController();        
      mc.animateTo(p);
      mc.setZoom(5);
       
        mapOverlays = mapView.getOverlays();
        drawable = this.getResources().getDrawable(R.drawable.androidmarker);
        itemizedOverlay = new HelloItemizedOverlay(drawable);
       
        OverlayItem overlayitem = new OverlayItem(p, "", "");
       
        itemizedOverlay.addOverlay(overlayitem); 
      mapOverlays.add(itemizedOverlay);

    }       
}

코드를 대략 살펴보면 GeoPoint p=new GeoPoint(37450877,126768494); 에서 원하는 좌표점(위도, 경도)을 갖는 p 객체를 생성합니다.  위도와 경도는 지난강좌  MapView 이용하기 1 - 위도, 경도 구하기 에서 구한 값을 사용하면 됩니다. ','를 뺀 값을 입력하세요. ( 필자의 다음 글을 참조하세요.  => http://moozi.tistory.com/56 )

mc.animateTo(p);  는 좌표점으로 이동합니다.
mc.setZoom(5);  는 확대정도를 지정합니다.

mapOverlays = mapView.getOverlays(); 는 맵뷰의 overlay list 를 얻어옵니다.

OverlayItem overlayitem = new OverlayItem(p, "", ""); 는 좌표 p 를 이용해서 overlayitem을 생성합니다.

itemizedOverlay.addOverlay(overlayitem); 는 overlayitme 객체를 itemizedOverlay에 추가합니다.
mapOverlays.add(itemizedOverlay); 는 itemizedOverlay를 mapOverlays에 추가합니다.


5. Ctrl + F11 로 실행합니다.

[ 실행결과 ]

실행결과를 보면 지도가 서울을 중심으로 나타나며, 좌표점에 안드로이드 아이콘 이미지가 출력됨을 알 수 있습니다.

Comments