[OpenApi - kakao] 지오코딩 (Geocoding), json 파싱

강신현·2022년 4월 10일
0

지오코딩 (Geocoding)

고유 명칭(주소 등)을 가지고 위도와 경도의 좌표값을 얻는 것

Kakao Geocode API를 활용하여 구현해보자!

KakaoAK 승인키 발급

https://developers.kakao.com/ 에서 내 애플리케이션 생성 후 승인키를 발급 받을 수 있다.

PostMan에서 Test

https://dapi.kakao.com/v2/local/search/address.json?query=성신로 99

위 KakaoAK 승인키 조회에서 REST API키 혹은 Admin키를 value 값으로 넣어준다.

  • Query Parameter : 에 검색하고자 하는 도로명 주소(ex 성신로99)를 입력 후
  • header
    • key : Authorization
    • value : KakaoAK (한칸띄고) {REST API키 or Admin키}

Spring에서 Kakao API 호출하기

Header에 정보를 담아 보내야 하는 형태여서 getObject 등을 사용하지 못하는 대신 URLConnection을 사용했다.

  • 한글 때문에 글자가 깨질 수가 있기 때문에 URLEncoder을 이용해 roadFullAddr을 UTF-8로 인코딩 해줘야 한다.
public Float[] getJsonData(String roadFullAddr) {
        Float[] coordinate = new Float[2];

        String authorization_key = "KakaoAK ef8c0ce6769c009d6a81fecdb782518b";
        String apiUrl = "https://dapi.kakao.com/v2/local/search/address.json";
        String jsonString = null;

        try {
            roadFullAddr = URLEncoder.encode(roadFullAddr, "UTF-8");

            String address = apiUrl + "?query=" + roadFullAddr;

            URL url = new URL(address);
            URLConnection conn = url.openConnection();
            conn.setRequestProperty("Authorization", authorization_key);

            BufferedReader rd = null;
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            StringBuffer docJson = new StringBuffer();

            String line;

            while ((line = rd.readLine()) != null) {
                docJson.append(line);
            }

            jsonString = docJson.toString();
            rd.close();

            JSONObject jsonObject = new JSONObject(jsonString);
            JSONArray documentsArray = jsonObject.getJSONArray("documents");
            JSONObject documentsObject = documentsArray.getJSONObject(0);

            String longtitude = documentsObject.getString("x");
            String latitude = documentsObject.getString("y");

            coordinate[0] = Float.parseFloat(longtitude);
            coordinate[1] = Float.parseFloat(latitude);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return coordinate;
    }

Reference

https://velog.io/@dsunni/Spring-%EC%A3%BC%EC%86%8C-%EC%9C%84%EB%8F%84%EA%B2%BD%EB%8F%84-%EC%B2%98%EB%A6%AC

profile
땅콩의 모험 (server)

0개의 댓글