본문 바로가기
개발/안드로이드

[안드로이드] 원하는 좌표를 구글맵 화면에 표시해보자(LatLngBounds)

by 핸디(Handy) 2020. 5. 16.

맵을 이동할때나 화면에 띄워줄때 특정 마커, 좌표 등을 포함하여 표시해서 보여줘야 할 때가 있습니다. 

이때 이용하는 기능이 LatLngbounds 입니다.
https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLngBounds#LatLngBounds(com.google.android.gms.maps.model.LatLng,%20com.google.android.gms.maps.model.LatLng)

아래 사진과 같이 모든 경로가 화면에 표시해줘야하는 상황입니다.

 

이런 기능을 위해 구글맵은 LatLngBounds 가 있습니다. 
해당 기능을 몰랐을때는 원하는 좌표들을 계산해서 중심좌표로 설정하고 줌 레벨을 적당히 조정해줘야하는 불편함이 있었습니다.

하지만 LatLngBounds 를 쓰면 타켓이 되는 좌표들을 이용해서 간단하게 만들어줄 수 있습니다. 

예시를 보면서 설명해드리겠습니다.

<코드>

 //범위 측정후 화면 이동
                LatLngBounds.Builder builder = LatLngBounds.builder();
                builder.include(startLatLng);
                builder.include(finishLatLng);
                LatLngBounds bounds = builder.build();
                mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,300) );

LatLngBounds의 builder를 만들어주고, 원하는 좌표를 include 해줍니다.
LatLng startLatLng = new LatLng(lat, lng) 입니다. 따라서 좌표를 builder 에 넣어주면 됩니다. 

그 후에 원하는 좌표를 때려박아 준다음 bounds를 build 해줍니다.

마지막으로 만든 bound를 토대로 카메라를 이동시켜주면 됩니다. bounds 옆에 있는 숫자(여기선 300)은 여백의 픽셀수입니다.

LatLngBounds bounds, int padding)
LatLngBounds bounds, int width, int height, int padding)

오버로딩된 아래 메소드의 경우 넓이를 계산하여 패딩을 줄 수 있습니다. 하지만 여기선 전체 방향으로 여백을 주는 메소드를 사용하겠습니다. 이때 화면의 크기를 구하려면 아래의 코드를 사용하면 됩니다.

DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
int width = dm.widthPixels;
int height = dm.heightPixels;

그 후에

mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,width,height,300) );

 를 쓰시면 됩니다.

이제 최종 결과물을 확인하겠습니다.

중앙대 서울캠과 수서역이 화면 중심에 표시되고 좌우로 패딩이 들어간 상태로 보여집니다. 

고생하셨습니다~~

댓글