@Nullable
private Address geoCoding(String addressString) {
Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocationName(addressString, 10);
if (addresses != null && !addresses.isEmpty()) {
return addresses.get(0);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Nullable
private Address reverseGeoCoding(double latitude, double longitude) {
Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
if (addresses != null && !addresses.isEmpty()) {
return addresses.get(0);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private void fetchAddressInfo() {
String addressString = searchEdit.getText().toString();
Address address = geoCoding(addressString);
if (address != null) {
double latitude = address.getLatitude();
double longitude = address.getLongitude();
Address reverseAddress = reverseGeoCoding(latitude, longitude);
if (reverseAddress != null) {
String premises = reverseAddress.getPremises();
String postalCode = reverseAddress.getPostalCode(); // 우편번호
String sido = reverseAddress.getAdminArea(); // 시,도
String gu = reverseAddress.getSubLocality(); // 구
String dong = reverseAddress.getThoroughfare(); // 동
String jibunAddress = reverseAddress.getFeatureName(); // 세부주소
String roadAddress = reverseAddress.getAddressLine(0).replaceFirst("대한민국 ", "");
String jibun = sido + " " + gu + " " + dong + " " + jibunAddress;
// 검색 결과를 LocationSearchList 객체로 변환
LocationSearchList searchResult = new LocationSearchList(postalCode, roadAddress, jibun);
// locationSearchList에 검색 결과 추가
ArrayList<LocationSearchList> locationSearchList = new ArrayList<>();
locationSearchList.add(searchResult);
// 리사이클러뷰 어댑터에 데이터 세트
searchAdapter.setLocationSearchList(locationSearchList);
searchAdapter.notifyDataSetChanged(); // 어댑터에 데이터 변경 알림
Log.d("Recycler", "아이템 갯수 " + searchAdapter.getItemCount());
if (searchAdapter.getItemCount() == 0) {
searchViewLayout.setVisibility(View.GONE);
searchNullLayout.setVisibility(View.VISIBLE);
} else {
searchViewLayout.setVisibility(View.VISIBLE);
searchNullLayout.setVisibility(View.GONE);
}
} else {
Toast.makeText(getActivity(), "No detailed address found", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getActivity(), "No address found", Toast.LENGTH_SHORT).show();
}
}
현재 이러한 함수들을 통해 검색한 주소의 좌표를 얻고 얻은 좌표로 역지오코딩을 통해 주소를 얻고 잇습니다.
도로명주소와 우편번호등 기타 데이터는 모두 정상이지만
String dong = reverseAddress.getThoroughfare(); //동
이 값만 반환값이 null이 반환되고 있습니다.