Android에서 위도,경도나 주소를 이용해서 서로를 구하는 경우에 GeoCoding이 쓰인다.
GeoCoding(지오코딩)
주소를 가지고 위도,경도를 구하는 것
Reverse-GeoCoding (역지오코딩)
위도,경도를 가지고 주소를 구하는 것
(2023-02-14)
GRPC 오류 유의
GeoCoding 시 try-catch문을 이용해서 GRPC 오류가 났을때의 예외를 잡는다
1. 많은 주소 Main Thread에서 동기화 작업시, 주소 변경은 시간을 많이 사용하는 작업, 비동기 작업으로 수행
2. 불안정한 인터넷 상황
3. 변환하는 좌표값(위도, 경도)가 소수점 3자리를 넘어가면 가끔 발생
GeoCoding - 주소나 지명 -> 위치 (위도,경도)
//주소로 위도,경도 구하는 GeoCoding
fun geoCoding(address: String): Location {
return try {
Geocoder(context, Locale.KOREA).getFromLocationName(address, 1)?.let{
Location("").apply {
latitude = it[0].latitude
longitude = it[0].longitude
}
}?: Location("").apply {
latitude = 0.0
longitude = 0.0
}
}catch (e:Exception) {
e.printStackTrace()
geoCoding(address) //재시도
}
}
getFromLocationName()을 이용해 Location 객체로 위도 경도를 return하는 함수
인자로 장소( string )와 maxResult( 결과의 최대 개수 int )로 구성, 따라서 사용자가 입력한 주소 str과 maxResult(int)를 인자로 넣어줍니다.
maxResult는 주소에 따른 위도, 경도의 정확도를 판별할때 쓰인다고 합니다.
getAddressLine( int index ) | index에 해당하는 주소 출력 |
getCountryName() | 국가이름 (대한민국) |
getAdminArea() | 행정구역 (서울특별시) |
getLocality() | 관할구역 (중구) |
getThoroughtfare() | 상세구역 (봉래동2가) |
getFeatureName() | 상세주소 (122-21) |
getFromLocationName()의 리턴값은 List이므로 Size로 갯수 체크 후 For문을 돌려 이후 처리도 가능
Reverse-GeoCoding - 위치 (위도,경도) -> 주소
//위도 경도로 주소 구하는 Reverse-GeoCoding
private fun getAddress(location: Location): String {
return try {
with(Geocoder(context, Locale.KOREA).getFromLocation(location.latitude, location.longitude, 1).first()){
getAddressLine(0) //주소
countryName //국가이름 (대한민국)
countryCode //국가코드
adminArea //행정구역 (서울특별시)
locality //관할구역 (중구)
thoroughfare //상세구역 (봉래동2가)
featureName //상세주소 (122-21)
}
} catch (e: Exception){
e.printStackTrace()
getAddress(location)
}
}
getFromLocation()으로 인자로 받은 LatLng 객체의 위도와 경도를 넣고 각 필요 변수 사용
Location 객체를 받아 처리하였지만 Double 형을 넘겨 작업해도 된다.
'Android > Library' 카테고리의 다른 글
Fresco (0) | 2022.03.31 |
---|---|
GoogleMap 다중 Marker Clustering, Custom Cluster (0) | 2022.02.21 |
Google Map API 사용 방법 및 예제 (0) | 2022.02.18 |
Epoxy, Epoxy에 Databinding 사용 (RecyclerView 쉽게 사용) (0) | 2022.02.14 |
Android Room Database / 룸 데이터 베이스 (0) | 2022.01.14 |