Mobile Dev/Android2010. 11. 12. 13:37

안드로이드에서 구글맵을 연동하여 어플을 개발하다보면 위/경도 좌표에 대한 주소를 알고 싶은 경우가 있다.
물론 안드로이드 기본 SDK에서 주소정보를 제공하나 그렇게 맘에 들지 않아 직접 구글맵의 주소검색 서비스를 연동하는 방식을 알아봤고, 현재 만족하게 사용을 하고 있다.

의외로 참 간단하다. HttpClient를 이용하여 연동하면 끝.

* 구글맵 주소검색 URL
    http://www.google.com/maps/api/geocode/xml?latlng=37.512421,127.058815&sensor=true&language=ko
    - 코엑스의 위치에 대한 한글주소를 XML 형태로 가져올 수 있다.
    - latlng 파라미터는 위/경도 값이며, language는 받아보는 주소에 대한 언어 값이다. (ko=한글, en=영문 등)
    - 물론 XML이 아닌 JSON이나 다른 형태도 제공한다.
    - 참고로 주소에 대한 위치정보(지오코드)를 쉽고 다수로 얻으려면 
      http://www.biz-gis.com/bizBean/Land/Land.html 이곳이 편리하다.


   
* 주소검색 샘플 소스
public String searchAddressXml(double latitude, double longitude) throws Exception {
    String addressXml = null;

    String displayLanguage = context.getResources().getConfiguration().locale.getDisplayLanguage();
    String googleUrl = "http://www.google.com/maps/api/geocode/xml?latlng=%s,%s&sensor=true&language=%s";
    // 단말의 언어가 한국어로 설정되어 있으면 주소를 한글로 설정하고, 이외는 영어로 설정한다.
    String language = "한국어".equals(displayLanguage) ? "ko" : "en";

    googleUrl = String.format(googleUrl, String.valueOf(latitude), String.valueOf(longitude), language);

    HttpClient httpClient = null;
    try {
        httpClient = new HttpClient();
        HttpGet mGetMethod = new HttpGet(uri);
        HttpResponse mHttpRes = httpClient.execute(mGetMethod);

        if (mHttpRes.getStatusLine().getStatusCode() == 200) {
            LineNumberReader reader = null;
            try {
                reader = new LineNumberReader(new InputStreamReader(mHttpRes.getEntity().getContent()));
                StringBuilder httpResStr = new StringBuilder();
                while ((readStr = reader.readLine()) != null) {
                    httpResStr.append(readStr);
                }

                addressXml = httpResStr.toString();
            } finally {
                if (reader != null) {
                    reader.close();
                    reader = null;
                }
            }
        } 
    } finally {
        if (httpClient != null) {
            httpClient.shutdown();
            httpClient = null;
        }
    }

    return addressXml;
}

위 샘플 소스는 위/경도의 값을 받아서 주소를 검색하는 코드이여, 단말의 언어가 한국어로 되어 있으면 주소를 한글로 요청하며, 그외에는 영문으로 요청하게 된다.
코드의 결과는 XML이며, 위의 샘플 소스에  PullParser를 연결하여 분석하면 핸들링이 더욱 쉬워진다.
참 간단하지 않은가요.

Posted by as.wind.914