개발/자바스크립트 및 프론트

(자바스크립트) 카카오 맵 연동하기

kakk789 2022. 6. 27. 09:06

카카오 디벨로퍼 (지도 API 이용해보기)

1. 카카오 디벨로퍼 홈페이지로 가서 개발자 등록

https://developers.kakao.com/

2. 애플리케이션 추가하기

3. 키 값 반환 됨

4. 플랫폼 설정 (Web)

5. 카카오맵 API 사용

https://apis.map.kakao.com/

더보기

카카오 맵 연동 JavaScript 

  • 페이징 처리 완료
  • 해당 테이블 tr클릭 시 Marker 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	span{
		display: inline-block;
		margin: 5px;
		cursor: pointer;
	}
</style>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=API 키값"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
	/*야영(캠핑)장명: "오션파크"
	소재지도로명주소: "충청남도 태안군 남면 몽산포길 161"
	위도: "36.6744920527"
	경도: "126.2808663915"*/

$(function(){
	mapContainer = document.getElementById('map'); // 지도를 표시할 div 
	mapOption = { 
        center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
        level: 3 // 지도의 확대 레벨
	};
	map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다	
	
	
	var arr;
	
	var totalRecords=1;		//전체레코드 수
	var totalPage=1;		//전체페이지 수	
	var pageSize=10;		//한화면에 보여줄 레코드 수 
	var pageGroup = 10;		//한화면에 보여줄 페이지 수
	
	
	$.ajax({
		url:"전국야영(캠핑)장표준데이터.json",
		success:function(data){
			
			//data = {'field':[], 'records':[]}
			arr = data['records'];	
			console.log("전체데이터수:"+arr.length)
			totalRecords = arr.length;
			totalPage =  Math.ceil( totalRecords/pageSize );	

			//초기화 값으로 1페이지를 먼저 보여줌
			printPage(1); // 단일 페이지 당 보여 줄 레코드를 10개 출력
			printPageNumber(1); //1~10, 11~20 페이지번호를 출력하는 것(10개 출력)
		}
	});	
	
	 // 단일 페이지 당 보여 줄 레코드를 10개 출력
	function printPage(pageNUM){ //매개변수로 페이지 번호를 전달 받음
		$("#list").empty(); //이전에 내용을 모두 지움
		var start = (pageNUM-1)*pageSize + 1; //페이지의 시작 레코드
		var end = start + pageSize -1; //페이지의 마지막 레코드
		
		if(end > totalRecords){
			end = totalRecords;
		}
		console.log("start ", start);
		console.log("end ", end);
		
		for(var i=start-1; i<end; i++){ 
			var row = arr[i]; //야영장의 정보를 담은 객체
			var tr = $("<tr></tr>");
			
			//미래에 만들어 질 노드를 위하여 item이라는 Class이름을 붙였음
			$(tr).addClass("item");
			
// 			$(tr).attr("lat", row['위도']);
// 			$(tr).attr("lng", row['경도']);
			$(tr).attr({
				lat:row['위도'],
				lng:row['경도']
			});
			
			$(tr).append( $("<td></td>").html(  row['야영(캠핑)장명'] ) );
			$(tr).append( $("<td></td>").html(  row['소재지도로명주소'] ) );
			$(tr).append( $("<td></td>").html(  row['위도'] ) );
			$(tr).append( $("<td></td>").html(  row['경도'] ) );
			$("#list").append(tr);
			console.log(row);
		}
	}//end pringPage
	
	
	//한화면에 10개의 페이지번호를 출력하고 싶어요
	//만약에 현재페이지가 1,2,3,4,5,6,7,8,9,10,  ==> 시작페이지는 1, 마지막페이지는 10
	//~~~~           11,12,13,14,15,16,17,18,19,20  ==> 시작페이지는 11 마지막페이지는 20
	
	function printPageNumber(pageNUM){
		$("#pageing").empty();
		
		var startPage = Math.floor((pageNUM-1)/pageGroup) * pageGroup  + 1 ; 	
		var endPage = startPage + pageGroup - 1;
		
// 		console.log(pageNUM % pageGroup);
		
		if(endPage > totalPage){
			endPage = totalPage;
		}
		
		//맨 앞으로
		if(startPage!=1){
			var span = $("<span></span>").html("[맨 앞으로]");
			$(span).attr("page", 1);
			$("#pageing").append(span);
		}
		
		if(startPage > 1){
			var span = $("<span></span>").html("[이전]");
			$(span).attr("page",startPage - 1);
			$("#pageing").append(span);
		}
		
		for(i = startPage; i<=endPage ; i++){
			var span = $("<span></span>").html(i);
			$(span).attr("page",i);
			$("#pageing").append(span);					
		}
		
		//전체 totalpage 인 223 보다 현재 endPage가 작으면 다음 페이지가 있어야함
		if(endPage < totalPage){
			
			var span = $("<span></span>").html("[다음]");
			
			$(span).attr("page",endPage+1);
			$("#pageing").append(span);
		}
		
		//맨 끝으로
		//맨 마지막 페이지 그룹에 출력할 시작 페이지와 마지막 페이지를 구해야함.
		if(endPage < totalPage){
			
			var span = $("<span></span>").html("[맨 끝으로]");
			$(span).attr("page", totalPage);
			$("#pageing").append(span);
		}
	}
	
	$(document).on("click", "span", function(){
		var page = $(this).attr("page");
		printPage(page);
		printPageNumber(page);
	});
	
	$(document).on("click",".item", function(){
		var lat = Number( $(this).attr("lat"));
		var lng = Number( $(this).attr("lng"));
		
		newLatLng = new kakao.maps.LatLng(lat, lng);
		map.panTo(newLatLng);
		
		// 마커를 생성합니다
		var marker = new kakao.maps.Marker({
		    position: newLatLng
		});

		// 마커가 지도 위에 표시되도록 설정합니다
		marker.setMap(map);
	});
})

</script>
</head>
<body>
	<div id="pageing"></div>
	<table border="1" width="80%">
		<thead>
			<tr>
				<th>캠핑장명</th>
				<th>주소</th>				
				<th>위도</th>				
				<th>경도</th>				
			</tr>
		</thead>
		<tbody id="list">		
		</tbody>
	</table>
	<hr>
	<div id="map" style="width:100%;height:350px;"></div>
</body>
</html>

 

반응형