BLOG ARTICLE 구글지도 | 1 ARTICLE FOUND

  1. 2011.10.02 [android] 안드로이드 Google Map API – Overlay 사용법 (기능 정리)

1. 특정 지점에 위치 표시하기

 

관련 클래스

com.google.android.maps.MapView

 

MapView 클래스는 Google API에 포함된 외부 라이브러리이며 Google Maps에 접속하여 지도를 가져와서 화면에 그리는 기능을 한다.

 

com.google.android.maps.Overlay

 

MapView 클래스에서 지도 위에 오버레이하는 객체를 말한다. mapView.getOverlays() 명령어를 통해 MapView에서 오버레이하고 있는 것들의 리스트를 ( List<Overlay> ) 리턴받아 접근할 수 있다.단순히 List<Overlay>에 추가함으로써 사용자 정의 이미지를 추가할 수 있다.

 

 

예제http://micropilot.tistory.com/entry/Overlay를-사용하여-MapView-상의-지도위에-그리기

사용자 정의 Overlay 클래스 : MyOverlay

package com.ojtit.android.demo;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

public class MyOverlay extends Overlay {

 @Override
 public void draw(Canvas 
canvas, MapView mapView, boolean shadow) {

     super.draw(canvas, mapView, shadow);
     Paint paint1 = new Paint();
     Paint paint2 = new Paint();

     paint1.setARGB(255, 255, 0, 0); // a, r, g, b
     paint2.setARGB(255, 255, 0,0);

     // 아래에서 사용된 아규먼트는 위도경도 정보(40.756054)에서 가운데 '.' 을 뺀 것
     GeoPoint geoPoint = new GeoPoint(37517180,127041268); 
     Point 
pixPoint = new Point(); 
     
mapView.getProjection().toPixels(geoPoint, pixPoint); // 지리좌표를 화면상의 픽셀좌표로 변환

     canvas.drawCircle(pixPoint.x, pixPoint.y, 10, paint1);
     
canvas.drawText("강남구청역", pixPoint.x-30, pixPoint.y + 30, paint2);    
 }

 

맵 위에 이미지 그리기

package com.ojtit.android.demo;

import android.os.Bundle;

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

public class GoogleMapsActivity extends MapActivity
{

 @Override
 public void onCreate(Bundle savedInstanceState) 
 {
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.main);
  MapView mapView = (MapView) findViewById(R.id.mapview);
  mapView.setBuiltInZoomControls(true); 
//지도 확대/축소기능 활성화
  
  
//아래의 위도경도 좌표는 '37.517180' 에서 숫자 사이의 '.' 을 제거한 표현임
  GeoPoint geoPoint = new GeoPoint(37517180,127041268); 
// 강남구청역
  MapController mc = mapView.getController();
  mc.animateTo(geoPoint);
  mc.setZoom(17);
  
  
// MapView 상의 지도 위에 표현할 것들을 그린다
  
mapView.getOverlays().add(new MyOverlay());
 }
 
 @Override
 protected boolean isRouteDisplayed() {
  return true;
 }
}

 

 

2. 화면 좌표와 지리정보 교환하기

 

관련 클래스

MapView.getProjection()

MapView 인스턴스 명령어 getProjection()을 통해 Projection 클래스를 리턴 받음

com.google.android.maps.Projection
fromPixels(int x, int y) : 
화면상의 x,y 좌표로부터 지리정보(GeoPoint)를 얻는다.
toPixels(GeoPoint in, android.graphics.Point out) : 
지리정보(GeoPoint) Point 정보로 변환

 

 

3. 주어진 지리 정보(GeoPoint)로 뷰 이동하기

 

관련 클래스

MapView.getController()

MapView 인스턴스 명령어 getController()을 통해 MapController 클래스를 리턴 받음

com.google.android.maps.MapController
animateTo(GeoPoint point) : 
해당 지리정보(GeoPoint)로 화면을 애니메이션 이동시킨다.
setCenter(GeoPoint point) : 
해당 지리정보(GeoPoint)로 화면을 이동시킨다.

 

 

참고 :

 

http://code.google.com/intl/ko-KR/android/add-ons/google-apis/maps-overview.html

http://micropilot.tistory.com/entry/Overlay-사용하여-MapView-상의-지도위에-그리기

http://lomohome.com/316

http://www.winapi.co.kr/android/annex/17-3.htm

 

 

웹브라우저용 api 는 좀더 디테일하고 한글로도 문서가 잘 정리되어있습니다.


4. 오버레이 뷰의 터치 이벤트로 롱 터치받기

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView( R.layout.artifact_map);

MapView mapview = (MapView)findViewById(R.id.mapview);

//맵뷰 터치 이벤트 등록

mapview.getOverlays().add(new LongTouchOverlay());

}

private class LongTouchOverlay extends com.google.android.maps.Overlay{


    @Override

    public boolean onTouchEvent(MotionEvent event, MapView mapview){


if(event.getAction() == MotionEvent.ACTION_UP){
//터치한 시간 

float elapse = event.getEventTime() - event.getDownTime();

//Log.i("maplog", String.valueOf(elapse));

//오래 클릭하면

if(elapse > 500.0){

Toast.makeText(context, "롱클릭!", Toast.LENGTH_SHORT);

}

}

if(event.getAction() == MotionEvent.ACTION_MOVE){

if(isShowMyPosition() ){

hideMyPosition();

}

}

        return false;

    }

}



5. MapView 위에 버튼 올려놓기(오버레이는 아님)
레이아웃 XML을 이렇게 작성하면 됨.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent"> 

<com.google.android.maps.MapView

android:id="@+id/mapview" android:apiKey="0-3q2UKAoZOkgWRlZ-0UmB7ct4hMHt8zfGqOjCQ"

android:layout_width="fill_parent" android:layout_height="fill_parent"

android:clickable="true" />


<ImageButton android:id="@+id/mapview_searchBt"

android:layout_width="wrap_content" android:layout_height="wrap_content"

android:background="@drawable/magnifier"

android:layout_alignParentRight="true"></ImageButton>

</RelativeLayout>


                                             출처 : http://blog.hansune.com/263

 
 
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST