안드로이드 개발 정보
(글 수 1,068)
맵뷰를 사용하는 유형에는 여러가지가 있지만
한 고정 위치를 기준으로 반경을 표시하는 방법이 있습니다.
주로 현재 위치 기반으로 주변의 특정 정보를 표시하고자 할때
일정 범위까지만 표시된다는 것을 알리기 위해 주로 사용하는 방법인데요
오늘은 맵의 줌 상태에 따라 일정한 거리를 표시해주는 반경을 만들어보도록 하겠습니다.
우선 동영상을 보시고요
처음에는 고정 크기를 그리도록 하였고
두번째에 맵의 상태에 따라 일정 거리를 표시하도록 하였습니다.
우선 소스를 보도록 하겠습니다.
package com.nobrain.googlesample; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.location.Location; /** * 실제 화면 상의 거리를 계산하여 원을 그리도록 함 * @author NoBrain * */ public class CircleOverlay extends Overlay { private Paint mPaint; private GeoPoint mCurrentGeoPoint; private boolean isChecked; public CircleOverlay() { mPaint = new Paint(); mPaint.setColor(0x3f00008F); } @Override public void draw(Canvas canvas, MapView mapview, boolean arg2) { super.draw(canvas, mapview, arg2); // 가로 길이 int mapWidth = mapview.getWidth(); // 0.0 위치 GeoPoint mMinXGeoPoint = mapview.getProjection().fromPixels(0, 0); // maxX, 0 위치 GeoPoint mMaxXGeoPoint = mapview.getProjection().fromPixels(mapview.getWidth(), 0); // 맵뷰의 가로 길이 기준으로 거리 값 측정하기 float[] results = new float[1]; Location.distanceBetween(mMinXGeoPoint.getLatitudeE6() / 1E6, mMinXGeoPoint.getLongitudeE6() / 1E6, mMaxXGeoPoint.getLatitudeE6() / 1E6, mMaxXGeoPoint.getLongitudeE6() / 1E6, results); // 현재 위치를 픽셀로 변환함 Point point = new Point(); mapview.getProjection().toPixels(mCurrentGeoPoint, point ); if(isChecked){ // 체크 된 상태면 맵 실제 크기 대비로 그림 float radius = ((float) mapWidth / results[0]) * 250; canvas.drawCircle(point.x, point.y, radius, mPaint); }else{ // 체크 안된 상태면 고정 크기로 그림 canvas.drawCircle(point.x, point.y, 250, mPaint); } } /** * 체크 상태 설정하기 * @param isChecked 체크 상태 */ public void setChecked(boolean isChecked) { this.isChecked = isChecked; } /** * 현재 위치 설정하기 * @param mGeoPoint 현재 위치 */ public void setCurrentGeoPoint(GeoPoint mGeoPoint){ this.mCurrentGeoPoint = mGeoPoint; } }
키포인트 함수는 아래의 2개 입니다
//특정 좌표간의 실제 거리 값을 주는 함수 //results 배열의 크기가 1이면 0번에 거리가, 2면 1번에, 3이상이면 2번에 거리 값이 들어갑니다. float[] results = new float[1]; Location.distanceBetween(startLatitude, startLongitude, endLatitude, endLongitude, results)
//point 변수에 특정 좌표를 픽셀 위치로 변환해줍니다. Point point = new Point(); mapview.getProjection().toPixels(mCurrentGeoPoint, point );
위의 2개 값을 통해 화면의 가로를 거리로 치환한 다음 반경을 그리도록 하였습니다.
위와 같이 작성한 오버레이를 맵뷰에 추가해 주시면 됩니다.
샘플 프로젝트는 첨부하였으니 참고하시기 바랍니다 :)
좋은 예제 네요 ^^
수고하세요!