๐Ÿ”ง API_

[KAKAO MAP] ์นด์นด์˜ค ์ง€๋„ API ํ™œ์šฉํ•˜๊ธฐ: ํŽธ์˜์  ์œ„์น˜ ํ‘œ์‹œ ๋ฐ ์ƒ์„ธ ์ •๋ณด ๊ตฌํ˜„ ๐Ÿš€

Joyfullyever 2025. 4. 7. 22:48

1๏ธโƒฃ ์นด์นด์˜ค ์ง€๋„ API Key ๋ฐœ๊ธ‰๋ฐ›๊ธฐ

• ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋“ฑ๋กํ•˜๊ณ , ํ•„์š”ํ•œ API ํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•จ

• ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ํฌํ„ธ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํ›„,

[๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜] > [์•ฑ ์„ค์ •] > [ํ”Œ๋žซํผ] > [Web ํ”Œ๋žซํผ ์ถ”๊ฐ€]๋ฅผ ํ†ตํ•ด ์‚ฌ์ดํŠธ ๋„๋ฉ”์ธ์„ ๋“ฑ๋ก

 

2๏ธโƒฃ HTML ํŒŒ์ผ์— ์ง€๋„ ์‚ฝ์ž…

• ๊ธฐ๋ณธ HTML ๊ตฌ์กฐ ๋‚ด์— ์นด์นด์˜ค ์ง€๋„๋ฅผ ์‚ฝ์ž…

• <div> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€๋„๊ฐ€ ํ‘œ์‹œ๋  ์˜์—ญ์„ ์ง€์ •ํ•˜๊ณ , <script> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์นด์นด์˜ค ์ง€๋„ API๋ฅผ ๋กœ๋“œ

<div id="map" style="width:100%;height:350px;"></div>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=YOUR_APP_KEY&libraries=services"></script>

 

3๏ธโƒฃ ์ง€๋„์— ํŽธ์˜์  ์œ„์น˜ ํ‘œ์‹œ

• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€๋„์— ํŽธ์˜์ ์˜ ์œ„์น˜๋ฅผ ๋งˆ์ปค๋กœ ์ถ”๊ฐ€

• ์ง€๋„ ๊ฐ์ฒด๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ , ํŽธ์˜์  ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋ฐฐ์—ด์„ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฐ ์œ„์น˜์— marker์™€ infowindow๋ฅผ ์ถ”๊ฐ€

var mapContainer = document.getElementById('map'), // ์ง€๋„๋ฅผ ํ‘œ์‹œํ•  div
    mapOption = {
        center: new kakao.maps.LatLng(37.566826, 126.9786567), // ์ง€๋„์˜ ์ค‘์‹ฌ์ขŒํ‘œ
        level: 3 // ์ง€๋„์˜ ํ™•๋Œ€ ๋ ˆ๋ฒจ
    };

var map = new kakao.maps.Map(mapContainer, mapOption); // ์ง€๋„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

// ํŽธ์˜์  ์œ„์น˜ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด
var positions = [
    {
        title: '๋กฏ๋ฐ๋ฆฌ์•„ ๋ช…๋™์ ',
        latlng: new kakao.maps.LatLng(37.563619, 126.985237)
    },
    {
        title: '์„ธ๋ธ์ผ๋ ˆ๋ธ ์ข…๋กœ3๊ฐ€์ ',
        latlng: new kakao.maps.LatLng(37.570841, 126.991957)
    }
];

// ๋งˆ์ปค ์ด๋ฏธ์ง€์˜ ์ด๋ฏธ์ง€ ์ฃผ์†Œ
var imageSrc = 'http://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png'; 

for (var i = 0; i < positions.length; i ++) {
    // ๋งˆ์ปค ์ด๋ฏธ์ง€์˜ ์ด๋ฏธ์ง€ ํฌ๊ธฐ
    var imageSize = new kakao.maps.Size(24, 35); 
    
    // ๋งˆ์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ   
    var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize); 

    // ๋งˆ์ปค ์ƒ์„ฑ
    var marker = new kakao.maps.Marker({
        map: map, // ๋งˆ์ปค๋ฅผ ํ‘œ์‹œํ•  ์ง€๋„
        position: positions[i].latlng, // ๋งˆ์ปค๋ฅผ ํ‘œ์‹œํ•  ์œ„์น˜
        title : positions[i].title, // ๋งˆ์ปค์˜ ํƒ€์ดํ‹€
        image : markerImage // ๋งˆ์ปค ์ด๋ฏธ์ง€ 
    });
}

 

4๏ธโƒฃ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ฐ•ํ™”

• ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ปค๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ธํฌ์œˆ๋„์šฐ์— ํŽธ์˜์ ์˜ ์ด๋ฆ„๊ณผ ์ฃผ์†Œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€

• kakao.maps.event.addListener ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์ปค ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ

 

5๏ธโƒฃ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ

HTML5์˜ Geolocation API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ํ™•์ธ

if ('geolocation' in navigator) {
    navigator.geolocation.getCurrentPosition(function(position) {
        var lat = position.coords.latitude, // ์œ„๋„
            lon = position.coords.longitude; // ๊ฒฝ๋„
        var locPosition = new kakao.maps.LatLng(lat, lon); // ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ƒ์„ฑ

        map.setCenter(locPosition); // ์ง€๋„์˜ ์ค‘์‹ฌ์„ ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋กœ ์ด๋™
    });
} else {
    alert('์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” Geolocation์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.');
}

 

6๏ธโƒฃ ์ฃผ๋ณ€ ํŽธ์˜์  ์ฐพ๊ธฐ

์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฃผ๋ณ€ ํŽธ์˜์ ์„ ์ฐพ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

์นด์นด์˜ค ์ง€๋„ API์˜ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„ ํ™œ์šฉํ•˜์—ฌ ์ฃผ๋ณ€ ํŽธ์˜์ ์„ ๊ฒ€์ƒ‰

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ‚ค์›Œ๋“œ๋กœ 'ํŽธ์˜์ '์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ง€๋„์— ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•

// ์žฅ์†Œ ๊ฒ€์ƒ‰ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
var ps = new kakao.maps.services.Places(map);

// ํ‚ค์›Œ๋“œ๋กœ ์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰
ps.keywordSearch('ํŽธ์˜์ ', placesSearchCB, {
    location: locPosition,
    radius: 500 // 500m ๋ฐ˜๊ฒฝ ๋‚ด ๊ฒ€์ƒ‰
});

// ์žฅ์†Œ ๊ฒ€์ƒ‰์ด ์™„๋ฃŒ๋์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜
function placesSearchCB(data, status, pagination) {
    if (status === kakao.maps.services.Status.OK) {
        var bounds = new kakao.maps.LatLngBounds();

        for (var i=0; i<data.length; i++) {
            displayMarker(data[i]);    
            bounds.extend(new kakao.maps.LatLng(data[i].y, data[i].x));
        }       

        map.setBounds(bounds);
    } else if (status === kakao.maps.services.Status.ZERO_RESULT) {
        alert('๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.');
    } else if (status === kakao.maps.services.Status.ERROR) {
        alert('๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

// ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ชฉ๋ก๊ณผ ๋งˆ์ปค๋ฅผ ํ‘œ์ถœํ•˜๋Š” ํ•จ์ˆ˜
function displayMarker(place) {
    var marker = new kakao.maps.Marker({
        map: map,
        position: new kakao.maps.LatLng(place.y, place.x) 
    });

    // ๋งˆ์ปค์— ํด๋ฆญ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋ก
    kakao.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent('<div style="padding:5px;font-size:12px;">' + place.place_name + '</div>');
        infowindow.open(map, marker);
    });
}