MyOverlay.java
새로 생성하여 추가한 클래스
MapView상에 출력된 지도의 특정 위치에 텍스트나 도형, 이미지 등을 출력하기 위해서는 Overlay 클래스를 사용해야 한다.
이 클래스를 상속하여 draw() 메소드를 오버라이드할 때 Canvas에 원하는 것을 그려주면 되는 방식이다. 지도상의 위치는
'위도/경도'로 표현되므로 화면상의 특정위치로 변환해야 하는 과정이 필요한데, 이런 경우에는
mapView.getProjection().toPixels(geoPoint, pixPoint); <-- 이렇게 변환하면 된다.
변환 결과는 pixPoint 에 저장되어 지도에 무언가를 표현하고자 할 때 위치정보로 사용하면 된다.
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) { // TODO Auto-generated method stub 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); // 지리좌표를 화면상의 픽셀좌표로 변환 // drawCircle(float cx, float cy, float radius, Paint paint) ; // drawLine(float startX, float startY, float stopX, float stopY, Paint paint) ; // drawText(String text, float x, float y, Paint paint) ; canvas.drawCircle(pixPoint.x, pixPoint.y, 10, paint1); canvas.drawText("강남구청역", pixPoint.x-30, pixPoint.y + 30, paint2); } }
GoogleMapsActivity.java
MapView 상에 Overlay를 설정하면 지도위에 표현할 것들을 그릴 수 있다
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); //지도 확대/축소기능 활성화 //아래 라인을 사용하면 지도처럼 표현하는 것이 아니라 위성에서 촬영한 항공사진이 출력됨 //mapView.setSatellite(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; } }
'About Programing > 05. Android' 카테고리의 다른 글
Activity 생명 주기 (1) | 2011.01.02 |
---|---|
onTouchEvent (0) | 2010.12.14 |
Android Error [requires .class compatibility set to 5.0. Please fix project properties] (0) | 2010.12.09 |
Android system 구축 및 설계 필기 (0) | 2010.11.22 |
RelativeLayout (0) | 2010.11.09 |