사용된 API : Naver Maps OpenAPI
네이버 클라우드 플랫폼의Geocoding API를 사용
https://api.ncloud-docs.com/docs/ai-naver-mapsgeocoding-geocode
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
public class Project01_D {
public static void main(String[] args) {
// https://www.ncloud.com/ 로부터 가입후 얻어온 client_id, client_secret 값을 넣어준다.
String client_id = "6yd5dlj11z";
String client_secret = "7YyQB64C4CWyCuUR44plpdqZcECSqCT6pVGqoeBl";
// System.in 을 이용해서 키보드로부터 값을 byte stream으로 입력 받는다
// 주소는 문자이기 떄문에 InputStreamReader 클래스로 연결해서 받는다.
// 문자 스트림을 한줄 단위로 읽어 들이기 위해 BufferedReader 로 연결 해준다.
BufferedReader io = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("주소를 입력 하세요 : ");
String address = io.readLine(); // 한 라인을 읽어 들인다.
String addr = URLEncoder.encode(address, "UTF-8"); // 입력한 주소의 공백 등을 문자로 처리 하기 위해 인코딩 해준다.(공백=>%20으로 변경)
String reqUrl = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query="+addr;
URL url = new URL(reqUrl); // 입력 받은 url이 정상적인지 확인하기 위하여 URL객체로 생성.
HttpURLConnection con = (HttpURLConnection) url.openConnection(); // URL객체에 openConnection을 사용하여 연결 시도
// 요청 헤더의 메서드와 필수 값인 X-NCP-APIGW-API-KEY-ID, X-NCP-APIGW-API-KEY 값을 싣어 전송해준다.
con.setRequestMethod("GET");
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", client_id);
con.setRequestProperty("X-NCP-APIGW-API-KEY", client_secret);
BufferedReader br;
int responseCode = con.getResponseCode(); // 정상적으로 연결이 되었을 경우 200 값이 넘어 온다.
// getInputStream() 을 통해 값을 읽어 오는데 이것은 byte 스트림 이다.
// 문자 단위로 바꾸기 위해 InputStreamReader를 사용.
// 라인 단위로 읽어 들이기 위해 다시한번 BufferedReader를 사용.
if (responseCode == 200) {
br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); // 성공시
} else {
br = new BufferedReader(new InputStreamReader(con.getErrorStream())); // 에러시 getErrorStream을 사용
}
String line;
StringBuffer response = new StringBuffer();
while ((line = br.readLine()) != null) { // 가져온 주소 데이터의 readLine()를 이용해 한줄을 읽어서 line 스트링 변수에 담는다.
response.append(line); // 스프링버퍼 변수에 읽어 들인 값을 담아주면 response 값에 모든 값이 문자열로 담긴다.
}
br.close();
// response 안에 있는 JSON을 String Tokenizer를 이용해서 JSON 객체로 바꾸는 작업.
JSONTokener tokener = new JSONTokener(response.toString()); // JSON 객체로 문자열을 메모리에 올린다.
JSONObject object = new JSONObject(tokener); // JSON Object로 만들어준다.
System.out.println(object.toString(2));
JSONArray arr = object.getJSONArray("addresses"); // 객체안에 있는 Address의 값들을 배열로 읽어 들인다.
// 주소 정보는 거의 1개가 오기 때문에 굳이 반복문을 쓸 필요는 없음.
for(int i=0; i<arr.length(); i++) {
JSONObject temp = (JSONObject) arr.get(i);
System.out.println("address: " + temp.get("roadAddress"));
System.out.println("jibunAddress: " + temp.get("jibunAddress"));
System.out.println("경도 : " + temp.get("x"));
System.out.println("위도 : " + temp.get("y"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
# 출처 : Inflearn - Java TPC 실전 프로젝트의 내용을 실습 하며 정리한 내용 입니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
[Geocoding(지도서비스) 프로젝트] 2. Java Geocoding(지도 이미지 생성하기) (0) | 2022.04.06 |
---|