Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(android) GoogleMap 지도위에 도형이미지 그리기

안드로이드 개발
반응형

안드로이드(android) GoogleMap 지도위에 도형이미지 그리기

 

개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2

 

우리가 지도 관련 어플을 만들게 되면 순수하게 지도만 사용하는

경우가 드물다. 이 지도를 가지고 현재 거쳐온 경로를 표시한다던지,

아니면 범위를 설정하기 위해 사작형을 그려야 되는 경우가

생기게 된다.

 

그럼 이런 경우에는 어떤 식으로 구현을 해야될까?

먼저 이번 예제에서는 간단하게 위도, 경도의 위치에 사각형을 그리고

그 안에 색을 칠할 것이다. 그런 후에 색이 칠해진 사각형 안에 색이 없는

사각형을 하나 더 만들것이다.

 

사각형을 만드는 함수는 PolygonOptions 클래스를 이용하는데

addAll() 함수에 파라미터로 LatLng List 형태로 넘기면 된다.

사각형이니까 각 꼭지점이 되는 부분을 설정하면 된다.

 

// 설정
PolygonOptions options = new  PolygonOptions ();
// 그리기 좌표를 설정
options.addAll (createRectangle (new LatLng (lat , lng ), 0.5 , 0.5 ));

꼭지점을 넘겨주는 좌표설정 함수 createRectangle 의 내용은 다음과 같다,

Arrays.asList 함수로 만들고 있으며 넘겨준 2번째, 3번째 파라미터로 가로

세로 값을 빼고 , 더한다.

 

private List <LatLng> createRectangle (LatLng center, Double  halfWidth, Double  halfHeight) {
    return  Arrays.asList (new  LatLng (center.latitude - halfHeight, center.longitude - halfWidth),
            new  LatLng (center.latitude - halfHeight, center.longitude + halfWidth),
            new  LatLng (center.latitude + halfHeight, center.longitude + halfWidth),
            new  LatLng (center.latitude + halfHeight, center.longitude - halfWidth),
            new  LatLng (center.latitude - halfHeight, center.longitude - halfWidth));
}

다음은 사각형 내에 사이를 비우는 홀 사각형을 만들것이다

이것도 함수를 지원하는데 addHole() 이다. 그리고 사각형의 가득 채우는

함수 fillColor() , 사각형을 그릴 때 라인의 색상 strokeColor(), 라인의

굵기값을 셋팅하는 strokeWidth() 를 아래와 같이 구현하였다.

마지막으로 addPolygon() 에 파라미터로 위에서 설정한 옵션값을 넘기면 된다.

 

// 빼기
options.addHole (createRectangle (new LatLng (lat , lng ), 0.1 , 0.1 ));
// 채우기
options.fillColor (0x44ff0000 );
// 선
options.strokeColor (Color.RED);
// 선폭
options.strokeWidth (5);
// 그리기
mGoogleMap.addPolygon (options);

처음에 잘 그려졌겠지 하고 실행을 했는데 색이 전혀 보이지 않는것이다.

에러가 난것도 아닌데 한참을 찾아 헤맷다. 여러 고민끝에 혹시 현재 배율보다

사각형이 더 커서 지도를 벗어나 보이지 않는 것이 아닌가 하는 가정을

해보았다. 그래서 아래함수에서 배율값을 줄였다. 처음 15에서 5

줄인것이다.

 

// 맵 위치이동
mGoogleMap.moveCamera(
                CameraUpdateFactory.newLatLngZoom(position, 5));

위와 같이 줄이니 아래 그림과 같이 사각형을 너무 크게 그려서 못보았던 것이다.

 

그래서 배율에 맞게 createrectangle 함수의 double 값을 소수점 3자리로

낮추어서 넘겼다.  그렇게 해서 아래 그림과 같은 결과를 얻었다.

사각형이나 선, 혹은 그림을 오렸는데 안보인다고 너무 당황하지

않기를 바란다.

// 그리기 좌표를 설정
options.addAll (createRectangle (new LatLng (lat , lng ), 0.005 , 0.005 ));
// 빼기
options.addHole (createRectangle (new LatLng (lat , lng ), 0.001 , 0.001 ));

 

 

전체 함수의 내용은 아래와 같다. 파라미터로 위도와 경도만 넘기면 된다.

private  void setUpMap(double lat, double lng) {
    // 설정
    PolygonOptions options = new  PolygonOptions ();
    // 그리기 좌표를 설정
    options.addAll (createRectangle (new LatLng (lat , lng ), 0.005 , 0.005 ));
    // 빼기
    options.addHole (createRectangle (new LatLng (lat , lng ), 0.001 , 0.001 ));
    // 채우기
    options.fillColor (0x44ff0000 );
    // 선
    options.strokeColor (Color.RED);
    // 선폭
    options.strokeWidth (5);
    // 그리기
    mGoogleMap.addPolygon (options);
}
 
private List <LatLng> createRectangle (LatLng center, Double  halfWidth, Double  halfHeight) {
    return  Arrays.asList (new  LatLng (center.latitude - halfHeight, center.longitude - halfWidth),
            new  LatLng (center.latitude - halfHeight, center.longitude + halfWidth),
            new  LatLng (center.latitude + halfHeight, center.longitude + halfWidth),
            new  LatLng (center.latitude + halfHeight, center.longitude - halfWidth),
            new  LatLng (center.latitude - halfHeight, center.longitude - halfWidth));
}
반응형
Posted by 녹두장군1
,