Study Record

[안드로이드] 네이버 지도 API - 카메라 본문

안드로이드

[안드로이드] 네이버 지도 API - 카메라

초코초코초코 2022. 5. 15. 19:26
728x90

 

네이버 지도 API

https://navermaps.github.io/android-map-sdk/guide-ko/1.html

 

시작하기 · 네이버 지도 안드로이드 SDK

No results matching ""

navermaps.github.io

 

 카메라

네이버 지도 SDK는 기기 화면 건너편의 지도를 카메라로 바라보는 방식으로 지도를 표현한다. 카메라를 이동, 확대 및 축소, 기울임, 회전시킴으로써 화면에 보이는 지도를 자유자재로 움직일 수 있다.

 

→ CameraPosition 객체

카메라의 위치를 나타내는 클래스로 한 번 생성된 객체의 속성은 변경할 수 없다.

 

CameraPosition 객체의 카메라 위치 속성

① 대상 지점(target) :  카메라가 놓여 있는 대상 지점의 좌표를 나타내는 속성이다.

② 줌 레벨(zoom) : 줌 레벨은 지도의 축척을 나타내며 작을수록 지도가 축소되고 클수록 확대된다.

③ 기울임 각도(title) : 기울임 각도를 나타내는 속성으로 카메라는 기울임 각도만큼 지면을 비스듬하게 내려다본다. 기울임 각도가 0이면 수직으로 내려다보고 각도가 증가하면 수평에 가깝게 기울어진다. (default : 0)

④ 베어링 각도(bearing) : 베어링은 카메라가 바라보는 방위를 의미한다. ex. 동쪽 : 90도 , 남쪽 : 180도 (default : 0)

 

// 객체 생성
val cameraPosition = CameraPosition(
        LatLng(37.5666102, 126.9783881), // 대상 지점
        16.0, // 줌 레벨
        20.0, // 기울임 각도
        180.0 // 베어링 각도
)

// 카메라 현재 위치 가져오기
val cameraPosition = naverMap.cameraPosition

 

→ 카메라 초기 옵션 지정

// MapFragment 에서 카메라 설정하기
val options = NaverMapOptions()
        .camera(CameraPosition(LatLng(35.1798159, 129.0750222), 8.0))
        .mapType(NaverMap.MapType.Terrain)
        
val mapFragment = MapFragment.newInstance(options)

 

→ 카메라 움직이기

val cameraPosition = CameraPosition( 
    LatLng(37.5666102, 126.9783881),
    10.0
)

// 지정한 카메라 위치로 이동
val cameraUpdate = CameraUpdate.toCameraPosition(cameraPosition)

// 지정한 좌표로 변경
val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))

// 카메라 대상 지점을 지정한 픽셀만큼 이동
val cameraUpdate = CameraUpdate.scrollBy(PointF())

// 카메라 움직이기
naverMap.moveCamera(cameraUpdate)

 

→ 카메라 애니메이션

카메라를 움직이기 전에 CameraUpdate.animate()를 호출하면 카메라 이동에 애니메이션을 움직일 수 있다.

 

# 애니메이션 유형

① None : 애니메이션 없음. 기본 값

② Linear : 일정한 속도로 이동

③ Easing : 부드럽게 가감속하며 이동 - 가까운 거리 적합

④ Fly : 부드럽게 축소됐다가 확대되며 이동 - 먼 거리 적합

 

// animate(애니메이션 유형, 지속시간)
val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
        .animate(CameraAnimation.Fly, 1000)
        
naverMap.moveCamera(cameraUpdate)

// 기본 애니메이션 시간 변경
naverMap.defaultCameraAnimationDuration = 500

// 애니메이션 취소
naverMap.cancelTransitions()

 

→ 카메라 콜백과 이벤트

 

# 카메라 종료와 취소 이벤트

val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
        .animate(CameraAnimation.Easing, 2000)
        .finishCallback {
            // 애니메이션이 완료되었을 때 호출
            Toast.makeText(context, "카메라 이동 완료", Toast.LENGTH_SHORT).show()
        }
        .cancelCallback {
            // 애니메이션이 지정되어있고 그것을 취소했을 경우에만 호출
            Toast.makeText(context, "카메라 이동 취소", Toast.LENGTH_SHORT).show()
        }

naverMap.moveCamera(cameraUpdate)

 

# 카메라 변경 이벤트

// 카메라 변경 이벤트
naverMap.addOnCameraChangeListener { reason, animated ->
    Log.i("NaverMap", "카메라 변경 - reson: $reason, animated: $animated")
}

val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
        .animate(CameraAnimation.Easing, 2000)
        .reason(1000)

naverMap.moveCamera(cameraUpdate)

※ reason

카메라가 변경된 이유를 나타내는 속성으로 미리 정의된 원인은 다음과 같다.

① REASON_DEVELOPER : 개발자가 API를 호출해 카메라가 움직임

② REASON_GESTURE : 사용자의 제스처로 인해 카메라가 움직임

③ REASON_CONTROL : 사용자의 버튼 선택으로 인해 카메라가 움직였음

④ REASON_LOCATION : 위치 트래킹 기능으로 인해 카메라가 움직였음

 

※ animated

이벤트를 발생시킨 카메라 이동에 애니메이션이 지정되어 있는지 여부를 나타낸다.

 

# 카메라 대기 이벤트

카메라의 움직임이 끝나고 대기 상태가 되면 호출되는 이벤트다.

 

※ 대기 상태가 됐을 경우

카메라가 애니메이션 없이 움직일 때

카메라 애니메이션이 완료될 때

 NaverMap.cancelTransitions() 가 호출되어 카메라 애니메이션이 명시적으로 취소될 때

 

naverMap.addOnCameraIdleListener {
    Toast.makeText(context, "카메라 움직임 종료", Toast.LENGTH_SHORT).show()
}

 

→ 카메라 기타 설정

 

# 카메라 영역 제한

카메라의 대상 지점을 영역 내로 제한한다.

naverMap.extent = LatLngBounds(LatLng(31.43, 122.37), LatLng(44.35, 132.0))

 

# 최소 및 최대 줌 레벨

// 카메라 줌 레벨을 5~18 범위로 제한
naverMap.minZoom = 5.0
naverMap.maxZoom = 18.0
728x90