다음 지도 API가 Kakao 지도 API로 바뀌었다. 놀라운 점은 설명서를 많이 달아 주어서 따라 하기만 하면 대부분의 문제를 해결할 수 있었다. 여기에 있는 소스도 Kakao 지도 API 묻고 답하기에 나오는 것인데 찾기 힘들어서 카피해 놓은 것이다.  몇 가지를 해결해야 했다.

1) 주소를 이용하여 좌표값을 얻고 마커를 표시하기.

2) 다중 마커와 다중 인포윈도우 표시하기.

3) 인포윈도우는 클릭하면 나오고 클릭하면 들어가고.

    <div id="map"></div>
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=kakaomapappkey&libraries=services"></script>
    <script>

        var listData = [
            ["서울 중구 세종대로 110","서울특별시청"],
            ["경기 수원시 팔달구 효원로 1","경기도청"]
        ];

        // 맵을 넣을 div
        var mapContainer = document.getElementById('map');
        var mapOption = {
            center: new daum.maps.LatLng(35.95, 128.25),
            level: 13
        };  

        // 맵 표시
        var map = new daum.maps.Map(mapContainer, mapOption); 

        // 일반 지도와 스카이뷰로 지도 타입을 전환할 수 있는 지도타입 컨트롤을 생성합니다
        var mapTypeControl = new kakao.maps.MapTypeControl();
        map.addControl(mapTypeControl, kakao.maps.ControlPosition.TOPRIGHT);

        // 지도 확대 축소를 제어할 수 있는  줌 컨트롤을 생성합니다
        var zoomControl = new kakao.maps.ZoomControl();
        map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);

        // 주소 -> 좌표 변환 라이브러리        
        var geocoder = new daum.maps.services.Geocoder();
        
        // foreach loop
        listData.forEach(function(addr, index) {
            geocoder.addressSearch(addr[0], function(result, status) {
                if (status === daum.maps.services.Status.OK) {
                    var coords = new daum.maps.LatLng(result[0].y, result[0].x);
        
                    var marker = new daum.maps.Marker({
                        position: coords,
                        clickable: true
                    });
        
                    // 마커를 지도에 표시합니다.
                    marker.setMap(map);
    
                    // 인포윈도우를 생성합니다
                    var infowindow = new kakao.maps.InfoWindow({
                        content: '<div style="width:150px;text-align:center;padding:6px 0;">' + addr[1] + '</div>',
                        removable : true
                    });
                        
                    // 마커에 클릭이벤트를 등록합니다
                    kakao.maps.event.addListener(marker, 'click', function() {
                          // 마커 위에 인포윈도우를 표시합니다
                          infowindow.open(map, marker);  
                    });
                } 
            });
        });
    </script>

 

PHP에서 해야 할 일은 listdata의 주소와 인포윈도우에 표시할 내용을 넣어 주는 것 뿐이다. 그것까지 포함한 완전한 소스는 다음과 같다.

 

<?php

// 데이터베이스에서 읽어서 주소와 인포윈도우 내용을 출력하는 함수 작성
function WriteAddress() {

    echo '
            ["서울 중구 세종대로 110","서울특별시청"],
            ["경기 수원시 팔달구 효원로 1","경기도청"]
    ';

}

?>

<!doctype html>
<html lang="ko">
<head>
    <meta charset="utf-8">

    <meta name="viewport" content="initial-scale=1.0,user-scalable=no">
    <style type="text/css">
        html { height: 100% }
        body { height: 100%; margin: 0; padding: 0 }
        h1,h5   { text-align : center}
        #map { width: 90%; height: 80%; border : solid blue ; margin-left:auto; margin-right:auto }
    </style>
</head>
<body>
    <h1>주소 -> 좌표 전환, 다중 마커, 다중 인포윈도우 표시</h1>
    <div id="map"></div>
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=kakaomapappkey&libraries=services"></script>
    <script>

        var listData = [
<?php
            WriteAddress();
?>
        ];

        // 맵을 넣을 div
        var mapContainer = document.getElementById('map');
        var mapOption = {
            center: new daum.maps.LatLng(35.95, 128.25),
            level: 13
        };  

        // 맵 표시
        var map = new daum.maps.Map(mapContainer, mapOption); 

        // 일반 지도와 스카이뷰로 지도 타입을 전환할 수 있는 지도타입 컨트롤을 생성합니다
        var mapTypeControl = new kakao.maps.MapTypeControl();
        map.addControl(mapTypeControl, kakao.maps.ControlPosition.TOPRIGHT);

        // 지도 확대 축소를 제어할 수 있는  줌 컨트롤을 생성합니다
        var zoomControl = new kakao.maps.ZoomControl();
        map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);

        // 주소 -> 좌표 변환 라이브러리        
        var geocoder = new daum.maps.services.Geocoder();
        
        // foreach loop
        listData.forEach(function(addr, index) {
            geocoder.addressSearch(addr[0], function(result, status) {
                if (status === daum.maps.services.Status.OK) {
                    var coords = new daum.maps.LatLng(result[0].y, result[0].x);
        
                    var marker = new daum.maps.Marker({
                        position: coords,
                        clickable: true
                    });
        
                    // 마커를 지도에 표시합니다.
                    marker.setMap(map);
    
                    // 인포윈도우를 생성합니다
                    var infowindow = new kakao.maps.InfoWindow({
                        content: '<div style="width:150px;text-align:center;padding:6px 0;">' + addr[1] + '</div>',
                        removable : true
                    });
                        
                    // 마커에 클릭이벤트를 등록합니다
                    kakao.maps.event.addListener(marker, 'click', function() {
                        // 마커 위에 인포윈도우를 표시합니다
                        infowindow.open(map, marker);  
                    });
                } 
            });
        });
    </script>
</body>
</html>

 

 

 

카카오 맵 API에서 힘들게 찾지 않아도 될 것 같다.

 

+ Recent posts