[Android/Kotlin] Google GeoCoder 주소 ↔ 좌표 변환
안녕하세요 골드입니다.
오늘은 geocoder에 대해서 알아보도록 하겠습니다. 맵을 사용할 때, 사용자는 주소를 입력해서 위치에 대한 정보를 사용합니다. 그러나 앱은 주소를 좌표로 변환하여 사용합니다. 그렇기 때문에 주소를 좌표로 변환해주거나 좌표를 주소로 변환해서 사용자가 편리하게 사용할 수 있도록 geocoder를 사용해야 합니다. 먼저 geocoder를 잘 사용하기 위해 google map api key를 생성합니다. 생성 방법은 여기를 참고해주세요.
1. geocoder 사용하기
예제를 위해 간단하게 xml파일을 만들겠습니다. 별로 중요하지 않기 때문에 이미지만 간단히 보고 넘어가겠습니다. 알기 쉽게 버튼에 무슨 일을 하는지 적어놨습니다. 좌표 -> 주소, 주소 -> 좌표 변환을 하는 예제를 만들 것입니다.
먼저 Manifest에 위치 추적 관련 권한을 추가합니다. 위치는 ACCESS_FINE_LOCATION만 추가하면 됩니다.
이제 Activity(혹은 Fragment)에서 내 기기의 위치를 가져오도록 하겠습니다. 위치 서비스가 활성화되어 있고 기기에 위치 추적 기능이 있다면 가져올 수 있습니다.
저는 Activity에 코드를 작성하였습니다. 전역 변수로 FusedLocationProviderClient 클래스를 참조하는 데이터를 선언하였으며, 이 변수는 onCreate에서 초기화됩니다. FusedLocationProviderClient()는 기기의 마지막 위치를 가져오기 위해 사용합니다. if문 안에 위치 권한이 허용되었는지 확인한 후 확인되었다면 else문 안에 코드가 실행될 것입니다. 여기에 Fused와 버튼 리스너를 추가하여 예제를 완성하겠습니다.
끔찍하지만 한 눈에 보기 좋은 예제 코드가 완성되었습니다. 중요한 건 else구문 안에 있는 코드들입니다. 두 개의 버튼 리스너를 생성하였습니다. 하나는 좌표 -> 주소, 다른 하나는 주소 -> 좌표를 실행하는 버튼 리스너입니다. GeoCoder 객체를 참조하는 변수 geocoder가 getFromLocation()을 호출하여 좌표를 입력하고 개수인 maxResult값을 입력합니다. 그러면 해당 좌표에 해당하는 주소가 지정한 개수만큼 address에 list형식으로 할당되게 됩니다. 마찬가지로 EditText에 한글 주소를 입력하고 해당 주소에 대한 좌표를 가져올 수 있도록 getFromLocationName() 함수를 호출합니다. 실제로 사용해보면 .연산자를 통해 다양한 값을 갖고 있는 것을 확인할 수 있습니다. 에뮬레이터에서 실행해보도록 하겠습니다.
에뮬레이터에서 위치 권한을 설정한 후
에뮬레이터의 Location을 설정해줬습니다. 내 위치 좌표에 대한 주소를 Toast 메세지로 호출하는 모습입니다.
여기까지 골드였습니다.
감사합니다.
참고자료 : developer.android.com/training/location/retrieve-current