안드로이드에서 구글맵을 연동하여 어플을 개발하다보면 위/경도 좌표에 대한 주소를 알고 싶은 경우가 있다.
물론 안드로이드 기본 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를 연결하여 분석하면 핸들링이 더욱 쉬워진다.
참 간단하지 않은가요.