카카오맵의 API를 통해 주소 검색 및 위도 경도 검색하여 주소 얻기
카카오에서 제공하는 로컬 API를 사용하기 위해 애플리케이션을 생성하고 키를 발급 받아야 합니다.
설치 방법은 사이트 https://fromnowwon.tistory.com/entry/kakao-api?category=1021143 를 참고하세요.
여기서 생성한 REST API 값을 가지고 이를 키 활용하여 호출할 예정 이오니 복사해서 사용하시면 되겠습니다.
카카오의 로컬 REST API 에 주소 검색 및 좌표로 주소 검색하는 가이드 문서가 제공되어 있습니다.
https://developers.kakao.com/docs/latest/ko/local/dev-guide
REST API 테스트 도구에서 "주소검색" 및 "좌표로 주소 변환하기"를 통해 데이터 검증 및 테스트를 할 수 있습니다.
https://developers.kakao.com/tool/rest-api/open/get/v2-local-search-address.%7Bformat%7D
https://developers.kakao.com/docs/latest/ko/local/dev-guide 로컬 REST API 가이드에 따라, 원하시는 개발 언어에 맞게 호출을 하시면 되겠습니다. 여기 블로그에서는 C# 을 기반으로 호출하는 방법을 설명 드리겠습니다.
주소 검색
주소를 지도 위에 정확하게 표시하기 위해 해당 주소의 좌표 정보를 제공합니다. 주소 유형에 구분없이 변환할 수 있으며, 주소에 해당하는 지번 주소, 도로명 주소, 좌표, 우편번호, 빌딩명 등의 다양한 정보를 함께 제공하여 다양하게 활용할 수 있습니다.
GET /v2/local/search/address.${FORMAT}
HTTP/1.1 Host: dapi.kakao.com
Authorization: KakaoAK ${REST_API_KEY}
주소를 지도 위에 정확하게 표시하기 위해 해당 주소의 좌표 정보를 제공하는 API입니다. 주소에 해당하는 지번 주소, 도로명 주소, 좌표, 우편번호, 빌딩명 등의 다양한 정보를 함께 제공합니다. 이 API는 지번 주소, 도로명 주소 모두 지원합니다.
애플리케이션(이하 앱) REST API 키를 헤더에 담아 GET으로 요청합니다. 검색어와 함께 결과 형식 파라미터의 값을 선택적으로 추가할 수 있습니다.
응답은 JSON과 XML 형식을 지원합니다. 요청 시 URL의 ${FORMAT} 부분에 원하는 응답 형식을 지정할 수 있습니다. 별도로 포맷을 지정하지 않은 경우 응답은 JSON 형식으로 반환됩니다.
C# 언어 위주로 하겠습니다. 먼저 RestSharp (.NET용 REST API 클라이언트 라이브러리) 을 nuget 을 통해 설치하면 됩니다.
Install-Package RestSharp
(참고 사이트 : https://icodebroker.tistory.com/8797)
<호출하기>
var client = new RestClient("https://dapi.kakao.com/v2/local/search/address.json");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
//본인의 REST API 키값을 000000 부분 대체해서 입력해 주세요.
request.AddHeader("Authorization", "KakaoAK 0000000000");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
//주소 검색 키워드 호출하기
request.AddParameter("query", "종로구 종로65길 10(숭인동)");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
호출 후 json 형태로 데이터를 얻게 됩니다. 이를 parsing 해서 데이터를 얻으시면 되겠습니다.
<결과물 JSON 내용>
{
"documents": [
{
"address": {
"address_name": "서울 종로구 숭인동 178-167",
"b_code": "1111017500",
"h_code": "1111071000",
"main_address_no": "178",
"mountain_yn": "N",
"region_1depth_name": "서울",
"region_2depth_name": "종로구",
"region_3depth_h_name": "숭인2동",
"region_3depth_name": "숭인동",
"sub_address_no": "167",
"x": "127.019961720703",
"y": "37.5748752884313"
},
"address_name": "서울 종로구 종로65길 10",
"address_type": "ROAD_ADDR",
"road_address": {
"address_name": "서울 종로구 종로65길 10",
"building_name": "숭인제2동주민센터",
"main_building_no": "10",
"region_1depth_name": "서울",
"region_2depth_name": "종로구",
"region_3depth_name": "숭인동",
"road_name": "종로65길",
"sub_building_no": "",
"underground_yn": "N",
"x": "127.019961720703",
"y": "37.5748752884313",
"zone_no": "03112"
},
"x": "127.019961720703",
"y": "37.5748752884313"
}
],
"meta": {
"is_end": true,
"pageable_count": 1,
"total_count": 1
}
}
좌표로 주소 변환하기
좌표 정보의 지번 주소와 도로명 주소 정보를 반환하는 API입니다. 도로명 주소는 좌표에 따라 반환되지 않을 수 있습니다.
앱 REST API 키를 헤더에 담아 GET으로 요청합니다. 좌표와 함께 좌표계 파라미터를 추가할 수 있습니다.
응답은 JSON과 XML 형식을 지원합니다. 요청 시 URL의 ${FORMAT} 부분에 원하는 응답 형식을 지정할 수 있습니다. 별도로 포맷을 지정하지 않은 경우 응답은 JSON 형식으로 반환됩니다.
요청 성공 시 응답은 documents 하위에 지번 주소 또는 도로명 주소 상세 정보를 포함합니다.
<호출하기>
var client = new RestClient("https://dapi.kakao.com/v2/local/geo/coord2address.json");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
//본인의 REST API 키값을 00000 대체해서 사용하세요
request.AddHeader("Authorization", "KakaoAK 00000");
request.AlwaysMultipartFormData = true;
//x 는 경도(longitude)
request.AddParameter("x", "126.997196437908");
//y 는 위도(latitude)
request.AddParameter("y", "37.5804523853297");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
호출 후 json 형태로 데이터를 얻게 됩니다. 이를 parsing 해서 데이터를 얻으시면 되겠습니다.
<응답받은 JSON 데이터 내용>
{
"meta": {
"total_count": 1
},
"documents": [
{
"road_address": {
"address_name": "서울특별시 종로구 대학로 101",
"region_1depth_name": "서울",
"region_2depth_name": "종로구",
"region_3depth_name": "",
"road_name": "대학로",
"underground_yn": "N",
"main_building_no": "101",
"sub_building_no": "",
"building_name": "서울대학교병원",
"zone_no": "03080"
},
"address": {
"address_name": "서울 종로구 연건동 28-21",
"region_1depth_name": "서울",
"region_2depth_name": "종로구",
"region_3depth_name": "연건동",
"mountain_yn": "N",
"main_address_no": "28",
"sub_address_no": "21",
"zip_code": ""
}
}
]
}
추천 사이트
파이선 개발자 분들은 주소를 통해 위도, 경도 데이터를 얻고자 하신 분들은 아래 블로그 참고하시면 되겠습니다.
https://fhaktj8-18.tistory.com/entry/open-api
NAVER MAP API V3 네이버 맵 지도 V3 으로 주소와 좌표 검색 API 사용하기
https://aspdotnet.tistory.com/2486
JSON 문자열을 c# 객체 담아 데이터 추출하기(How to Deserialize JSON Into Dynamic Object in C#)
https://code-maze.com/csharp-deserialize-json-into-dynamic-object/
[Kakao Maps API] 카카오 맵 API 지도 마커표시 예제
https://cocoon1787.tistory.com/551
RestSharp 공식사이트
https://restsharp.dev/