[KAKAO MAP] ์นด์นด์ค ์ง๋ API ํ์ฉํ๊ธฐ: ํธ์์ ์์น ํ์ ๋ฐ ์์ธ ์ ๋ณด ๊ตฌํ ๐
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);
});
}