Programing/API

Java 자바 다음지도 좌표>주소 변환 API 활용방법

리커니 2018. 9. 26. 17:56
반응형

Java 자바 다음지도 좌표>주소 변환 API 활용방법

 

WGS84 좌표 값을 주소로 변환하기 위해서는

KakaoDevelopers 에서 해당 api에 대한 키를 발급받으셔야 합니다.

 

발급받은 REST API 키를 활용하여 좌표를 주소로 변환하는 방법을 알아보도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
    public static String coordToAddr(double x, double y){
        String url = "https://dapi.kakao.com/v2/local/geo/coord2address.json?x="+x+"&y="+y+"&input_coord=WGS84";
        String addr = "";
        try{
            addr = getRegionAddress(getJSONData(url));
            logger.info(addr);
        }catch(Exception e){
            logger.error("주소 api 요청 에러", e);
            e.printStackTrace();
        }
        return addr;
    }
cs

 

변환을 위한 API url은 위와 같습니다.

getJSONData 메소드는 해당 url로 요청을 후 리턴해 오는 json 데이터를 String으로 받아 리턴하는 함수 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    private static String getJSONData(String apiUrl) throws Exception {
        String jsonString = new String();
        String buf;
        URL url = new URL(apiUrl);
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        String auth = "KakaoAK "+apikey;
        conn.setRequestMethod("GET");
        conn.setRequestProperty("X-Requested-With""curl");
        conn.setRequestProperty("Authorization", auth);
        
        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn.getInputStream(), "UTF-8"));
        while ((buf = br.readLine()) != null) {
            jsonString += buf;
        }
        return jsonString;
    }
cs

 

여기서 주의하셔야 될 부분은 apikey를 httpConnection에 Autorization 으로 set 해주셔야 한다는 것입니다.

api url에 추가 하는 것이 아닙니다.

 

 

 

그럼 리턴받은 jsonString 데이터를 파싱하는 getRegionAddress 메소드를 보도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    private static String getRegionAddress(String jsonString) {
        String value = "";
        JSONObject jObj = (JSONObject) JSONValue.parse(jsonString);
        JSONObject meta = (JSONObject) jObj.get("meta");
        long size = (long) meta.get("total_count");
        if(size>0){
            JSONArray jArray = (JSONArray) jObj.get("documents");
            JSONObject subJobj = (JSONObject) jArray.get(0);
            JSONObject roadAddress =  (JSONObject) subJobj.get("road_address");
            if(roadAddress == null){
                JSONObject subsubJobj = (JSONObject) subJobj.get("address");
                value = (String) subsubJobj.get("address_name");
            }else{
                value = (String) roadAddress.get("address_name");
            }
            if(value.equals(""|| value==null){
                subJobj = (JSONObject) jArray.get(1);
                subJobj = (JSONObject) subJobj.get("address");
                value =(String) subJobj.get("address_name");    
            }
        }
        return value;
    }
cs

 

json 데이터의 구조는 sysout 하시면 확인 하실 수 있습니다.

저의 경우 도로명 주소를 우선으로 리턴하고, 도로명 주소가 없을 경우 지번으로 데이터를 받아오도록

구현하였습니다.

 

기타 좌표 관련 API는 아래의 Link를 참고하세요.

 

Link : https://developers.kakao.com/docs/restapi/local

반응형