안드로이드 개발 정보
(글 수 1,069)
맵뷰를 사용하는 유형에는 여러가지가 있지만
한 고정 위치를 기준으로 반경을 표시하는 방법이 있습니다.
주로 현재 위치 기반으로 주변의 특정 정보를 표시하고자 할때
일정 범위까지만 표시된다는 것을 알리기 위해 주로 사용하는 방법인데요
오늘은 맵의 줌 상태에 따라 일정한 거리를 표시해주는 반경을 만들어보도록 하겠습니다.
우선 동영상을 보시고요
처음에는 고정 크기를 그리도록 하였고
두번째에 맵의 상태에 따라 일정 거리를 표시하도록 하였습니다.
우선 소스를 보도록 하겠습니다.
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개 값을 통해 화면의 가로를 거리로 치환한 다음 반경을 그리도록 하였습니다.
위와 같이 작성한 오버레이를 맵뷰에 추가해 주시면 됩니다.
샘플 프로젝트는 첨부하였으니 참고하시기 바랍니다 :)




좋은 예제 네요 ^^
수고하세요!