2012년 5월 2일 수요일

[android] 위도,경도 ↔ 주소 취득

1. 위도, 경도로 주소 취득 (Geocoder 이용)

Location 와 LocationManager클래스를 이용해서 위도 경도 정보를 가지고 오자!
location 클래스의 getLatitude(), getLongitude() 메소드 사용
(여기서는 생략!)

취득한 위도,경도값을 가지고 주소를 리턴하는 메소드를 만들었다.

    /**
     * 위도,경도로 주소취득
     * @param lat
     * @param lng
     * @return 주소
     */
    private String findAddress(double lat, double lng) {                                            
        StringBuffer bf = new StringBuffer();
        Geocoder geocoder = new Geocoder(this, Locale.KOREA);
        List<Address> address;
        try {
          if (geocoder != null) {
                // 세번째 인수는 최대결과값인데 하나만 리턴받도록 설정했다
                address = geocoder.getFromLocation(lat, lng, 1);
                // 설정한 데이터로 주소가 리턴된 데이터가 있으면
               if (address != null && address.size() > 0) {
                    // 주소
                    currentLocationAddress = address.get(0).getAddressLine(0).toString();
                   
                    // 전송할 주소 데이터 (위도/경도 포함 편집)
                    bf.append(currentLocationAddress).append("#");
                    bf.append(lat).append("#");
                    bf.append(lng);
                }
            }
           
        } catch (IOException e) {
           Toast.makeText(baseContext, "주소취득 실패"
                 , Toast.LENGTH_LONG).show();

            e.printStackTrace();
        }
        return bf.toString();
    }
===============================================================================

2. 주소로 위도, 경도 취득 (Geocoder 이용)

    /**
     * 주소로부터 위치정보 취득
     * @param address 주소
     */
    private GeoPoint findGeoPoint(String address) {
        Geocoder geocoder = new Geocoder(this);
        Address addr;
        GeoPoint location = null;
        try {
            List<Address> listAddress = geocoder.getFromLocationName(address, 1);
            if (listAddress.size() > 0) { // 주소값이 존재 하면
                addr = listAddress.get(0); // Address형태로
                int lat = (int) (addr.getLatitude() * 1E6);
                int lng = (int) (addr.getLongitude() * 1E6);
                location = new GeoPoint(lat, lng);
               
                Log.d(TAG, "주소로부터 취득한 위도 : " + lat + ", 경도 : " + lng);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return location;
    }


簡単だろ~ ^0^

댓글 4개:

  1. 좋은 정보 감사합니다. 블로그 주소 비공개로 스크랩 하나 할께요 ^^

    답글삭제
  2. 안녕하세요 초보인데요.
    이렇게 코드 구현할 때 구글이나 네이버 api도 같이 이용해야되나요~? 대부분 검색시 이런 api들을 같이 이용해서요 ㅜㅜㅜ
    또한 위도 경도 좌표를 한글 주소로 변환시 한글 주소들을 담은 데이터베이스를 따로 만들어줘야하나요??

    답글삭제
  3. api 사용여부는 개발자 나름인것 같아요.
    위 코드는 구글맵의 geocoder api를 이용해서 샘플링 해본거구요.
    만드시려는거에 따라서 예를들면 다음맵이나 네이버맵을 이용해서 맵을 표시한다거나 각 api들을 보면 제공해주는 결과가 다를테니, 필요한걸 이용하시면되요.

    디비 여부도 그때그때 api를 이용해서 표시하는 용도 말고, 따로 저장을 해서 사용을 해야 한다고 하면 디비든 로컬스토리지든 이용해서 저장을 해야겠지요?

    어떤 용도로 만들고 어떤 걸 보여주느냐에 따라 api든데이터베이스든 사용여부가 결정될것 같습니다.

    답글삭제
  4. 안녕하세요. 한가지만 여쭐께요
    주소를 불러올때 도로명주소로 불러오는 방법은 없나요?

    답글삭제

++ 블로그 무단납치 아니아니 아니되오!! 얘기는 하고 델꾸가시오!! ++