본문 바로가기

Dev/공공데이터&API연동

도로명 주소 변환 Juso

728x90
반응형

도로명 주소 API 변환

아래의 API를 제공한다.

- 도로명 주소 API

- 영문주소 API

- 좌표제공 API

- 모바일용 API

 

 

https://www.juso.go.kr/openIndexPage.do

 

도로명주소 안내시스템

국가기초구역이란 각종 관할구역(통계, 우편, 소방, 경찰 등)을 관리하기 위해 나눈 단위 구역입니다.국가기초구역번호는 우편번호로 사용됩니다.

www.juso.go.kr

API를 사용하기 위해선 개발자 센터로 접속해야 한다.

https://www.juso.go.kr/addrlink/main.do?cPath=99MM

 

도로명주소 개발자센터

 

www.juso.go.kr

API 신청시 실명인증 후 바로 사용이 가능하다.

 

- 도로명주소 API 코드

CustomRestTemplate customRestTemplate = new CustomRestTemplate();
RestTemplate restTemplate = customRestTemplate.getCustomRestTemplate();
UriComponents builder = UriComponentsBuilder
		.fromHttpUrl("http://www.juso.go.kr/addrlink/addrLinkApi.do")
		.queryParam("keyword", modify_addr)
		.queryParam("currentPage", "1")
		.queryParam("countPerPage", "99")
		.queryParam("confmKey", "API 신청 후 발급 받은 키")
		.queryParam("resultType", "json")
		.build(false);

String response = restTemplate.getForObject(builder.toUriString(),String.class); 			    			
JSONParser jsonParser = new JSONParser();
JSONObject rtn_jsonObj = (JSONObject) jsonParser.parse(response);
JSONObject rtn_jsonObj_response = (JSONObject) jsonParser.parse(rtn_jsonObj.get("results").toString());
JSONObject rtn_jsonObj_response_common = (JSONObject) jsonParser.parse(rtn_jsonObj_response.get("common").toString());
String addr_rtn_cd = rtn_jsonObj_response_common.get("errorCode").toString();
int addr_cnt = Integer.parseInt(rtn_jsonObj_response_common.get("totalCount").toString());
if(addr_rtn_cd.equals("0")) {
	if (addr_cnt > 0) {
		JSONArray rtn_jsonObj_response_juso = (JSONArray) jsonParser.parse(rtn_jsonObj_response.get("juso").toString());			    				
		if (rtn_jsonObj_response_juso.size() > 0) {
			for (int j = 0; j < rtn_jsonObj_response_juso.size(); j++) {
				JSONObject temp_item2 = (JSONObject) rtn_jsonObj_response_juso.get(j);
				String fd_road_addr = temp_item2.get("roadAddrPart1") != null && !temp_item2.get("roadAddrPart1").toString().equals("") ? temp_item2.get("roadAddrPart1").toString() : "";
				String fd_jibun_addr = temp_item2.get("jibunAddr") != null && !temp_item2.get("jibunAddr").toString().equals("") ? temp_item2.get("jibunAddr").toString() : "";
				String fd_road_addr_eng = temp_item2.get("engAddr") != null && !temp_item2.get("engAddr").toString().equals("") ? temp_item2.get("engAddr").toString() : "";
				String fd_zip_no = temp_item2.get("zipNo") != null && !temp_item2.get("zipNo").toString().equals("") ? temp_item2.get("zipNo").toString() : "";
				String fd_adm_cd = temp_item2.get("admCd") != null&& !temp_item2.get("admCd").toString().equals("") ? temp_item2.get("admCd").toString() : "";
				String fd_rd_mgt_sn = temp_item2.get("rnMgtSn") != null	&& !temp_item2.get("rnMgtSn").toString().equals("")	? temp_item2.get("rnMgtSn").toString() : "";
				String fd_bd_mgt_sn = temp_item2.get("bdMgtSn") != null	&& !temp_item2.get("bdMgtSn").toString().equals("")	? temp_item2.get("bdMgtSn").toString() : "";
				String fd_bd_nm = temp_item2.get("bdNm") != null	&& !temp_item2.get("bdNm").toString().equals("")? temp_item2.get("bdNm").toString() : "";
				String fd_si_nm = temp_item2.get("siNm") != null	&& !temp_item2.get("siNm").toString().equals("")	? temp_item2.get("siNm").toString() : "";
				String fd_sgg_nm = temp_item2.get("sggNm") != null	&& !temp_item2.get("sggNm").toString().equals("")	? temp_item2.get("sggNm").toString() : "";
				String fd_emd_nm = temp_item2.get("emdNm") != null	&& !temp_item2.get("emdNm").toString().equals("")	? temp_item2.get("emdNm").toString() : "";
				String fd_li_nm = temp_item2.get("liNm") != null	&& !temp_item2.get("liNm").toString().equals("")	? temp_item2.get("liNm").toString() : "";
				String fd_rn = temp_item2.get("rn") != null	&& !temp_item2.get("rn").toString().equals("")	? temp_item2.get("rn").toString() : "";
				String fd_buld_mn_nm = temp_item2.get("buldMnnm") != null	&& !temp_item2.get("buldMnnm").toString().equals("")	? temp_item2.get("buldMnnm").toString() : "";
				String fd_buld_sl_no = temp_item2.get("buldSlno") != null	&& !temp_item2.get("buldSlno").toString().equals("")	? temp_item2.get("buldSlno").toString() : "";
				String fd_lnbr_mn_nm = temp_item2.get("lnbrMnnm") != null	&& !temp_item2.get("lnbrMnnm").toString().equals("")	? temp_item2.get("lnbrMnnm").toString() : "";
				String fd_lnbr_sl_no = temp_item2.get("lnbrSlno") != null	&& !temp_item2.get("lnbrSlno").toString().equals("")	? temp_item2.get("lnbrSlno").toString() : "";
				String udrtYn		 = temp_item2.get("udrtYn") != null	&& !temp_item2.get("udrtYn").toString().equals("")	? temp_item2.get("udrtYn").toString() : "";
			}
		}
	}
}

위의 코드는 주소 요청시 도로명주소에서 전달해주는 값이다.

 

요청 URL 출력결과
http://www.juso.go.kr/addrlink/addrLinkApiJsonp.do JSONP(xml, json)
http://www.juso.go.kr/addrlink/addrLinkApi.do xml, json

 

- 좌표 API

CustomRestTemplate customRestTemplate = new CustomRestTemplate();
RestTemplate restTemplate = customRestTemplate.getCustomRestTemplate();
UriComponents builder = UriComponentsBuilder
			.fromHttpUrl("http://www.juso.go.kr/addrlink/addrCoordApi.do")
			.queryParam("admCd", hMap.get("fd_adm_cd").toString())
			.queryParam("rnMgtSn", hMap.get("fd_rd_mgt_sn").toString())
			.queryParam("udrtYn", hMap.get("udrtYn").toString())
			.queryParam("buldMnnm", hMap.get("fd_buld_mn_nm").toString())
			.queryParam("buldSlno", hMap.get("fd_buld_sl_no").toString())
			.queryParam("currentPage", "1")
			.queryParam("countPerPage", "99")
			.queryParam("confmKey", "승인요청된 API 키")
			.queryParam("resultType", "json")
			.build(false);
String response = restTemplate.getForObject(builder.toUriString(),String.class); 
JSONParser jsonParser = new JSONParser();
JSONObject rtn_jsonObj = (JSONObject) jsonParser.parse(response);
JSONObject rtn_jsonObj_response = (JSONObject) jsonParser.parse(rtn_jsonObj.get("results").toString());
JSONObject rtn_jsonObj_response_common = (JSONObject) jsonParser.parse(rtn_jsonObj_response.get("common").toString());
String addr_rtn_cd = rtn_jsonObj_response_common.get("errorCode").toString();
int addr_cnt = Integer.parseInt(rtn_jsonObj_response_common.get("totalCount").toString());
if(addr_rtn_cd.equals("0") && addr_cnt > 0) {
	JSONArray rtn_jsonObj_response_juso = (JSONArray) jsonParser.parse(rtn_jsonObj_response.get("juso").toString());
	if (rtn_jsonObj_response_juso.size() > 0) {
		JSONObject temp_item2 = (JSONObject) rtn_jsonObj_response_juso.get(0);
		String entX = temp_item2.get("entX") != null	&& !temp_item2.get("entX").toString().equals("")	? temp_item2.get("entX").toString() : "";
		String entY = temp_item2.get("entY") != null	&& !temp_item2.get("entY").toString().equals("")	? temp_item2.get("entY").toString() : "";
		hMap.put("fd_x_pos", entX);
		hMap.put("fd_y_pos", entY);
	}
}

좌표값을 전달 받는 코드이다.

 

요청 URL 출력결과
http://www.juso.go.kr/addrlink/addrCoordApiJsonp.do JSONP(xml, json)
http://www.juso.go.kr/addrlink/addrCoordApi.do xml, json 

 

728x90
반응형