카카오 API를 이용해 주소 근처의 장소 추출하기

특정 주소의 지정한 반경안에 은행이나 편의점 등의 장소를 출력하고 싶을때가 있습니다.
카카오 API를 이용하면 되는데 아래 2개의 순서대로 진행하면 됩니다.
1.우선 주소에서 좌표를 받아오고
2.추출한 좌표를 이용해 장소 목록을 받아오기

좌표추출은 카카오 API로 주소를 위경도 좌표로 바꾸기( https://www.grunge.co.kr/techtip/126 )를 참고하시고
장소목록 코드는 카카오 API의 카테고리로 장소 검색할때 카테고리그룹코드(CategoryGroupCode)( https://www.grunge.co.kr/techtip/124 )를 참고하시면 됩니다.

<?php
$KAKAO_REST_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';// 발급받은 카카오 REST API 키(다른건 안됨.무조건 REST API 키)

if (isset($_GET['address'])) {
   $address = $_GET['address']; // 주소값이 있을때(address변수에 값이 있을때)
} else {
    $address = '서울특별시 영등포구 63로 50';//주소값이 없을때(address변수에 값이 없을때 기본주소)
}

$url = 'https://dapi.kakao.com/v2/local/search/address.json?query=' . urlencode($address);// API 호출

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: KakaoAK ' . $KAKAO_REST_KEY
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if (!empty($data['documents'][0])) {//배열값이 있을때
    $x = $data['documents'][0]['x']; // 경도
    $y = $data['documents'][0]['y']; // 위도
} else {//배열값이 없을때
    echo "좌표를 찾을 수 없습니다.";
}

$lat = $y;   // 서울특별시 영등포구 63로 50 위도
$lng = $x;  // 서울특별시 영등포구 63로 50 경도

$radius = 1000;   // 반경 1,000미터

$url = "https://dapi.kakao.com/v2/local/search/category.json?"
     . http_build_query([
           'category_group_code' => 'BK9', // 은행 코드
           'x' => $lng,
           'y' => $lat,
           'radius' => $radius,
           'size' => 15,
           'page' => 1
       ]);

$headers = [
    "Authorization: KakaoAK $apiKey"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if (!empty($data['documents'])) {
    echo "<h2>근처 은행 목록 (반경 {$radius}m)</h2>";
    foreach ($data['documents'] as $place) {
        echo "<strong>이름:</strong> " . htmlspecialchars($place['place_name']) . "<br>";
        echo "<strong>주소:</strong> " . htmlspecialchars($place['road_address_name'] ?: $place['address_name']) . "<br>";
        echo "<strong>전화번호:</strong> " . htmlspecialchars($place['phone'] ?: '정보 없음') . "<br>";
        echo "<strong>카테고리:</strong> " . htmlspecialchars($place['category_group_name']) . "<br>";
        echo "<hr>";
    }
} else {
    echo "근처에 은행이 없습니다.";
}

"말이 오해될 때가 아니라 침묵이 이해되지 못할 때 인간관계의 비극은 시작된다. - H. 데이빗 소로우"

- 인간관계, 말 -

북마크목록