반응형
# JSON API 활용 (네이버 클라우드 플랫폼 지도 API 이용 지도 이미지 생성)
## 네이버 클라우드 플랫폼 지도 API 활용 (위도, 경도 추출하여 지도 이미지 생성)
1. Static Map OpenAPI
- 등록한 서비스 관련 가이드 확인하여
- StaticMap : 요청된 URL 매개변수를 기반으로 웹 페이지에 표시할 수 있는 이미지로 지도를 반환.
- https://api.ncloud-docs.com/docs/ai-naver-mapsstaticmap
Static Map 개요 - Static Map
api.ncloud-docs.com
2. 구현 (Static Map OpenAPI 사용)
- Geocoding OpenAPI 사용하여 구현했던 작업물에 Static Map OpenAPI 사용하여 구현 진행.
- 파일로 생성하도록 작업.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class Project01_E {
public static void main(String[] args) {
// 주소 입력 -> 위도, 경도 좌표 추출.
BufferedReader io = new BufferedReader(new InputStreamReader(System.in));
String clientId = "8nuzd8r4bi";
String clientSecret = "gyCPtld0Wnpi2eYr6xsBi4ITu3OnD9trzLa5JM9p";
try {
System.out.println("주소를 입력해주세요 : ");
String address = io.readLine();
String addr = URLEncoder.encode(address, "UTF-8");
// Geocoding 개요에 나와있는 API URL 입력.
String apiURL = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query=" + addr; // JSON
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
// Geocoding 개요에 나와있는 요청 헤더 입력.
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
// 요청 결과 확인. 정상 호출인 경우 200
int responseCode = con.getResponseCode();
BufferedReader br;
if (responseCode == 200) {
br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
} else {
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer response = new StringBuffer();
String x = ""; // 경도
String y = ""; // 위도
String z = ""; // 주소
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
JSONTokener tokener = new JSONTokener(response.toString());
JSONObject object = new JSONObject(tokener);
JSONArray arr = object.getJSONArray("addresses");
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("y"));
System.out.println("경도 : " + temp.get("x"));
x = (String) temp.get("x"); // 경도
y = (String) temp.get("y"); // 위도
z = (String) temp.get("roadAddress"); // 주소
}
// Static Map OpenAPI
map_service(x, y, z);
} catch (Exception e) {
System.out.println(e);
}
}
// 지도이미지 생성 메서드.
public static void map_service(String point_x, String point_y, String address) {
String URL_STATICMAP = "https://naveropenapi.apigw.ntruss.com/map-static/v2/raster?";
try {
String pos = URLEncoder.encode(point_x + " " + point_y, "UTF-8");
String url = URL_STATICMAP;
url += "center=" + point_x + "," + point_y;
url += "&level=16&w=700&h=500";
url += "&markers=type:t|size:mid|pos:" + pos + "|label:" + URLEncoder.encode(address, "UTF-8");
URL u = new URL(url);
HttpURLConnection con = (HttpURLConnection) u.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", "앱 등록 시 발급받은 Client ID");
con.setRequestProperty("X-NCP-APIGW-API-KEY", "앱 등록 시 발급 받은 Client Secret");
int responseCode = con.getResponseCode();
BufferedReader br;
// 정상호출인 경우.
if (responseCode == 200) {
InputStream is = con.getInputStream();
int read = 0;
byte[] bytes = new byte[1024];
// 랜덤 파일명으로 파일 생성
String tempName = Long.valueOf(new Date().getTime()).toString();
File file = new File(tempName + ".jpg"); // 파일 생성.
file.createNewFile();
OutputStream out = new FileOutputStream(file);
while ((read = is.read(bytes)) != -1) {
out.write(bytes, 0, read); // 파일 작성
}
is.close();
} else { // 에러 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
}
} catch(Exception e) {
System.out.println(e);
}
}
}
반응형
'인프런 강의 학습 > Java TPC 실전' 카테고리의 다른 글
API활용_Jsoup API 이용한 웹 페이지 크롤링 (0) | 2022.06.19 |
---|---|
API활용_네이버 지도 API(지도 GUI 생성) (0) | 2022.06.18 |
API 활용_네이버 지도 API (주소 입력하여 위도, 경도 추출) (0) | 2022.06.15 |
API 활용_JSON-Java API (JSONObject, JSONArray, JSONTokener, InputStream) (0) | 2022.06.14 |
API 활용_JSON API (Gson, org.json) (0) | 2022.06.08 |