map.html 6.55 KB
<!DOCTYPE html>
<html>
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name = " description" content ="Open Map and find karaoke">
        <meta name = "author" content = "Hyun Soo Yoo">
        <title>Coin_Karaoke_Map</title>

        <style>
            div{
                height: 100vh;
                background-image: url('C:/Users/user/Documents/coinkaraoke/css/Sing.jpg');
                background-repeat : no-repeat;
                background-size : cover;
            }
        </style>

        <!-- <link rel="stylesheet" href="css/map.css"> -->
        <!-- link x -->
    </head>

    <body>
        <H2 id = "title_message">
            <center>경기 남부 코인 노래방 검색창</center>
        </H2>

        <div id="map" style="width:95%;height:600px;"></div>
        
        <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=8bdb655edc6934f343aaf0c8655559ca">
        </script>

    <script>
        var mapContainer = document.getElementById('map'), // 지도를 표시할 div 
            mapOption = { 
            center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
            level: 3 // 지도의 확대 레벨 
            }; 

        var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성

        // HTML5의 geolocation으로 사용할 수 있는지 확인 
        if (navigator.geolocation) {

            // GeoLocation을 이용해서 접속 위치를 얻어옴
            navigator.geolocation.getCurrentPosition(function(position) {

                var now_lat = position.coords.latitude, // 현재 위도
                    now_lon = position.coords.longitude; // 현재 경도

                var locPosition = new kakao.maps.LatLng(now_lat, now_lon) // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성

                // 마커를 표시
                displayMarker(locPosition);

            });

        } else { //GeoLocation을 사용할 수 없을때 마커 표시 위치 설정

            var locPosition = new kakao.maps.LatLng(33.450701, 126.570667)    

            displayMarker(locPosition);
        }

        // 지도에 마커를 표시하는 함수
        function displayMarker(locPosition) {

            // 마커를 생성
            var marker = new kakao.maps.Marker({  
                map: map, 
                position: locPosition
            }); 

            // 지도 중심좌표를 접속위치로 변경
            map.setCenter(locPosition);      
        }    

        //엑셀 파일 데이터 불러오기
        var XLSX = require("xlsx");
        var workbook = XLSX.readFile("C:/Users/user/Documents/coinkaraoke/coin_karaoke/public/xlsx/latitude_longitute.xlsx")

        var worksheet = workbook.Sheets[workbook.SheetNames[0]];

        var location_arr = []; //경기 나무 코인 노래방 주소 배열
        var latitude_arr = []; //경기 나무 코인 노래방 위도 배열
        var longitude_arr = []; //경기 나무 코인 노래방 경도 배열

        //엑셀 파일 데이터(주소) 배열 저장
        for(var i = 2 ; i <= 406; i++){
            location_arr.push(worksheet[`A${i}`].v);
        }

        var geocoder = new kakao.maps.services.Geocoder();
        //주소로부터 위도, 경도 찾기
        for(var i = 0 ; i < 405 ; i ++){
            geocoder.addressSearch(location_arr[i], function(result, status) {
                latitude_arr[i].push(result[i].y);
                longitude_arr[i].push(result[i].x);
            });
        }
        
        var distance = []; //거리
        var cal_distance = []; //거리
        var near_coin_address = new Array(5); //가까운 코인 노래방 5개
        var near_coin_latitude = new Array(5); //가까운 코인 노래방 5개
        var near_coin_longtitude = new Array(5); //가까운 코인 노래방 5개
        var near_coin_distance = new Array(5);

        //거리계산
        for(var i = 0 ; i < 405 ; i ++){
            distance.push(Math.sqrt(Math.pow((now_lat - latitude_arr[i])) + Math.pow((now_lon -longitude_arr[i]))));
            cal_distance.push(Math.sqrt(Math.pow((now_lat - latitude_arr[i])) + Math.pow((now_lon -longitude_arr[i]))));
        }
        
        //거리에 따른 정렬
        var temp;
        for(var i = 0; i < 404 ; i ++){
            for(var j = 0 ; j < 404-j ; j ++){
                if(cal_distance[j] > cal_distance[j+1]){
                    temp = cal_distance[j];
                    cal_distance[j] = cal_distance[j+1];
                    cal_distance[j] = temp;
                }
            }
        }

        //가까운 거리 배열 
        for(var i = 0 ; i < 5 ; i ++){
            near_coin_distance[i] = cal_distance[i];
        }
        
        for(var i = 0 ; i < 5 ; i ++){
            for(var j = 0; j < 404 ; j ++){
                if(near_coin_distance[i] == distance[j]){
                    near_coin_address[i] = location_arr[j];
                    near_coin_latitude[i] = latitude_arr[j];
                    near_coin_longtitude[i] = longitude_arr[j];
                }
            }
        }

        //가까운 코인 노래방 마킹

        var positions = [
            {
                latlng: new kakao.maps.LatLng(near_coin_latitude[0], near_coin_longtitude[0])
            },
            {
                latlng: new kakao.maps.LatLng(near_coin_latitude[1], near_coin_longtitude[1])
            },
            {
                latlng: new kakao.maps.LatLng(near_coin_latitude[2], near_coin_longtitude[2])
            },
            {
                latlng: new kakao.maps.LatLng(near_coin_latitude[3], near_coin_longtitude[3])
            },
            {
                latlng: new kakao.maps.LatLng(near_coin_latitude[4], near_coin_longtitude[4])
            }
        ];

        // 마커 이미지의 이미지 주소
        var imageSrc = "https://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, // 마커를 표시할 위치
                image : markerImage // 마커 이미지 
            });
        }

        </script>
        
    </body>

</html>