본문 바로가기
개발/GIS

[저장용] 네이버 지오코딩(JAVA)

by Strong_옹이 2022. 12. 20.
728x90
반응형

연계한 자료들을 지도에 보여주기 위해 연계가 끝난 뒤 주소정보로 좌표값을 geocoding하여 표출하고자함.

네이버 OpenAPI의 geocoding을 사용하여 포문을 돌면서 좌표를 취득하고 등록함.

try {
    //좌표가 없는 마트정보 조회
    List<Map<String, Object>> list = dataApiDAO.selectMartList();
    if (list != null && list.size() > 0) {
        HashMap<String, Object> param = new HashMap<String, Object>(); 

        for ( int j = 0 ; j < list.size(); j++ ) {
            //업데이트문에서 사용할 키 저장
            param.put("mgtno", list.get(j).get("mgtno"));

            String addr = URLEncoder.encode(list.get(j).get("addr").toString(), "utf-8");
            String apiUrl = getGeocodingUrl + addr;
            StringBuffer sb = new StringBuffer();

            URL url = new URL(apiUrl);
            HttpsURLConnection http = (HttpsURLConnection) url.openConnection();
            http.setRequestProperty("Content-Type", "application/json");
            http.setRequestProperty("X-NCP-APIGW-API-KEY-ID", getNaverKeyId);
            http.setRequestProperty("X-NCP-APIGW-API-KEY", getNaverKey);
            http.setRequestMethod("GET");
            http.connect();

            InputStreamReader in = new InputStreamReader(http.getInputStream(), "utf-8");
            BufferedReader br = new BufferedReader(in);
            String line;
            while ( (line = br.readLine()) != null ) {
                sb.append(line).append("\n");
            }

            JSONParser parser = new JSONParser();
            JSONObject jsonObject;
            JSONObject jsonObject2;
            JSONArray jsonArray;
            String x = "";
            String y = "";

            jsonObject = (JSONObject) parser.parse(sb.toString());
            jsonArray = (JSONArray) jsonObject.get("addresses");

            for ( int i = 0; i < jsonArray.size(); i++ ) {
                jsonObject2 = (JSONObject) jsonArray.get(i);
                System.out.println(jsonObject2);
                if ( null != jsonObject2.get("x")) {
                    x = jsonObject2.get("x").toString();
                }
                if ( null != jsonObject2.get("y")) {
                    y = jsonObject2.get("y").toString();
                }
            }

            if (!x.isEmpty() && !y.isEmpty()) {
                param.put("y", y);
                param.put("x", x);

                dataApiDAO.updateMartInfo(param);
            }
            br.close();
            in.close();
        }
    }
} catch (Exception e ) {
    e.printStackTrace();
}

 

728x90
반응형

댓글