고유 명칭(주소 등)을 가지고 위도와 경도의 좌표값을 얻는 것
Kakao Geocode API를 활용하여 구현해보자!
https://developers.kakao.com/ 에서 내 애플리케이션 생성 후 승인키를 발급 받을 수 있다.
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키}
Header에 정보를 담아 보내야 하는 형태여서 getObject 등을 사용하지 못하는 대신 URLConnection을 사용했다.
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;
}