Camera

지도는 평면을 내려다 보는 카메라에 의해 모델링 됩니다. 카메라(CameraPosition) 값을 바꿔서 지도를 이동시키고 회전하고 기울이고 확대/축소 할 수 있습니다.

1. CameraPosition 을 구성하는 속성

Property Description
Position 지도 평면의 중앙을 바라보는 위치. LatLng 으로 표현합니다.
ZoomLevel 카메라의 높이 값에 따라 확대/축소 정도가 달라지는 줌 레벨 값. 값이 작을수록 더 넓은 지역을 화면에 표시할 수 있고, 값이 클수록 더욱 상세한 화면을 볼 수 있습니다.
Rotate 카메라의 방위각을 나타내는 속성 값. 카메라가 바라보는 방향으로 북쪽에서 시계 방향으로 측정됩니다. (단위는 radian)
Tilt 카메라의 시야각을 나타내는 속성 값. 카메라는 기울기 각도만큼 땅을 비스듬히 내려다봅니다. (단위는 radian)
Height 지도의 카메라 높이 값.

1. 위치 (Position)

지도 평면의 중앙을 바라보는 위치. LatLng 으로 나타냅니다. image

2. 회전 (rotate)

카메라의 회전 각도. 정북기준으로 시계 방향으로 측정됩니다. (단위는 radian) image

3. 기울기 (Tilt)

카메라의 기울김 각도. 카메라는 지도 평면에서 수직방향 기준으로 측정됩니다. (단위는 radian) image

4. 확대/축소 (Zoom Level)

카메라의 높이 값에 따라 확대/축소 정도가 달라지는 줌 레벨 값. 값이 작을수록 더 넓은 지역을 화면에 표시할 수 있고, 값이 클수록 더욱 상세한 화면을 볼 수 있습니다. 확대/축소에 대한 자세한 API 내용은 확대/축소 줌 레벨 문서에서 확인해 주세요.

image image image


2. 현재의 카메라 값 가져오기


현재 지도의 위경도 좌표(LatLng)와 기울기(Tilt), 회전(Rotate), 확대/축소(ZoomLevel) 값을 나타내는 CameraPosition 을 가져옵니다. 값을 가져오는 방법은 상황에 따라 아래의 3가지 방법이 있습니다.

  1. API 를 호출한 시점의 카메라 위치 값을 가져온다. 진행 중인 카메라 이동이 있더라도 무시하고 값을 가져오기 때문에 현재 진행 중인 지도의 상태 값과 차이가 있을 수 있다.

    CameraPosition camera = kakaoMap.getCameraPosition();
    
  2. API 를 호출한 시점에서 카메라 위치 값을 비동기적으로 가져온다.

    kakaoMap.getCameraPosition(new KakaoMap.OnCameraPositionListener() {
        @Override
        public void onCameraPosition(CameraPosition cameraPosition) {
            // CameraPosition 파라미터 값
        }
    });
    
  3. 진행 중인 카메라 이동이 있을 때, 지도의 이동이 다 끝난 후 카메라 값을 가져온다.

    kakaoMap.setOnCameraMoveEndListener(new KakaoMap.OnCameraMoveEndListener() {
        @Override
        public void onCameraMoveEnd(@NonNull KakaoMap kakaoMap, @NonNull CameraPosition position, @NonNull GestureType gestureType) {
            // CameraPosition 파라미터 값
        }
    });
    

3. 카메라의 변경


카메라를 변경해서 지도를 움직이려면 CameraUpdateFactory 를 통해 만들어진 CameraUpdate 값이 필요합니다. 아래의 코드는 CameraUpdateFactory 의 다양한 사용 예시입니다.

// 1. 새로운 위치로 이동
CameraUpdateFactory.newCenterPosition(LatLng.from(37.402005, 127.108621));

// 2. 지도를 30도만큼 기울기
CameraUpdateFactory.tiltTo(Math.toRadians(30));

// 3. 지도를 시계방향으로 30도만큼 회전하기
CameraUpdateFactory.rotateTo(Math.toRadians(30));

// 4. 다양한 설정으로 ZoomLevel 바꾸기
CameraUpdateFactory.zoomIn();
CameraUpdateFactory.zoomOut();
CameraUpdateFactory.zoomTo(10);

아래와 같이 애니메이션 적용 여부를 설정해서 지도를 이동시킬 수 있습니다.

CameraUpdate cameraUpdate = CameraUpdateFactory.newCenterPosition(LatLng.from(37.402005, 127.108621));

// 1. 애니메이션 효과 없이 바로 지도 이동 
kakaoMap.moveCamera(cameraUpdate);

// 2. 애니메이션 효과를 적용하면서 지도 이동 
kakaoMap.moveCamera(cameraUpdate, CameraAnimation.from(500, true, true));