[java] Geocoder을 이용해 주소를 위도/경도로 변환하기

Geocoding 이란 주소를 위도, 경도로 변환해 주는 Google에서 제공하는 API입니다.

링크 : 지오코딩이란?

처음엔 HttpURLConnection 으로 접속해서 InputStreamReader 로 읽은 후 JSON으로 파싱 하게 만들었는데 해외 사이트에 geocoder 라이브러리를 이용하여 받아오는 예제가 있었다. 어쨌든 더 편리하고 깔끔하게 해결되었습니다.

Geocoder Maven dependency

1
2
3
4
5
<dependency>
<groupId>com.google.code.geocoder-java</groupId>
<artifactId>geocoder-java</artifactId>
<version>0.16</version>
</dependency>

Method

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static Float[] findGeoPoint(String location) {

if (location == null)
return null;

// setAddress : 변환하려는 주소 (경기도 성남시 분당구 등)
// setLanguate : 인코딩 설정
GeocoderRequest geocoderRequest = newGeocoderRequestBuilder().setAddress(location).setLanguage("ko").getGeocoderRequest();

try {
Geocoder geocoder = new Geocoder();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);

if (geocoderResponse.getStatus() == GeocoderStatus.OK & !geocoderResponse.getResults().isEmpty()) {
GeocoderResult geocoderResult=geocoderResponse.getResults().iterator().next();
LatLng latitudeLongitude = geocoderResult.getGeometry().getLocation();

Float[] coords = new Float[2];
coords[0] = latitudeLongitude.getLat().floatValue();
coords[1] = latitudeLongitude.getLng().floatValue();
return coords;
}
} catch (IOException ex) {
ex.printStackTrace();
}
return null;
}

latitudeLongitude.getLat().floatValue(); 이 부분은 floart 형이 아닌 toString()으로도 가능하다.

테스트

1
2
3
4
String location = "대전광역시 유성구 궁동";
Float[] coords = CommonUtil.findGeoPoint(location);

System.out.println(location + ": " + coords[0] + ", " + coords[1]);

결과

1
대전광역시 유성구 궁동 : 36.366701, 127.344510
Share