Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[KakaoMapStudy] 20240208 [프로그램 소스] 본문

[API]

[KakaoMapStudy] 20240208 [프로그램 소스]

Jelly-fish 2024. 2. 8. 14:08

 

KakaoMapStudy

 

체크할 사항

 

Ⅰ. 카카오 맵 Api 를 웹 사이트에 표현하기 - 기본

 

1. 지도가 그려질 공간을  div로 구성한다. id는 `"map"` 으로 설정한다.

→ `<div id="map">`

<div id="map" style="width: 100%; height: 350px;"></div>

2. 스크립트 영역에서 지도를 표시할 div 의 객체를 가져온 후
    지도의 중심 좌표 `center` 와 지도의 확대 축소 레벨 `level` 을 설정한다.

① 지도의 중심 좌표 설정

center = new kakao.maps.LatLng(37.5566126,126.9196347),

② 지도의 레벨 설정

level: 3,

3. 지도를 그릴 대상 div옵션을 `Map` 에 매개변수로 전달하여 지도를 생성한다.
var map = new kakao.maps.Map(container, options);

카카오 맵 Api 를 웹 사이트에 표현하기 - 기본 [전체 script 소스]
<script type="text/javascript">
	
    function initialize()
    {
    	container = document.getElementById("map");
        
        options =
        {
                                        //   위도        경도
                                        // ─────────  ──────────
            center: new kakao.maps.LatLng(37.5566126, 126.919634),
            //--> ① 지도의 중심 좌표 설정
            level: 3,
            //--> ② 지도의 레벨 설정
        };
		
        // 지도를 그릴 대상 div 와 옵션을 넘겨주며 지도 생성
        map = new kakao.maps.Map(container, options);
    }

</script>

 


 

 

 

Ⅱ. 카카오 맵 API 의 지도 중심위치 변경 메소드

 

메소드 기능
map = new kakao.maps.Map(container, options) container 엘리먼트에 options 에 해당하는 설정값들을 지정하여 지도를 생성한다.
moveLatLng = new kakao.maps.LatLng(int latitude, int longitude) 매개변수로 전달한 위도(latitude), 경도(longitude)에 맞는 지도의 중심 좌표 객체를 생성한다.
map.setCenter(moveLatLng) 매개변수로 전달받은 중심 좌표 객체로 지도 중심(center) 좌표를 변화시킨다.
map.panTo(moveLatLng) 지도 중심 좌표를 매개변수로 전달받은 중심 좌표 객체로 부드럽게 이동시킨다.

 


Ⅲ. 카카오 맵 API의 지도 정보를 가져오는 메소드

 

메소드 기능
map.getLevel() 지도의 확대·축소 레벨을 가져온다
map.setLevel(int level) 지도의 확대·축소 레벨을 설정한다.
center = map.getCenter() 지도의 현재 중심 좌표 얻어오기
map.getMapTypeId() 지도의 타입 얻어오기
bounds = map.getBounds() 지도의 현재 영역 얻어오기
center.getLat() 지도 중심좌표의 위도 얻어오기
center.getLng() 지도 중심좌표의 경도 얻어오기
bounds.getSouthWest() 얻어낸 현재 영역의 남서쪽 좌표 얻어오기
bounds.getNorthEast() 얻어낸 현재 영역의 북동쪽 좌표 얻어오기

Ⅳ. 카카오 맵 API 지도 타입 컨트롤 생성

 

지도 타입 컨트롤 생성 - 일반 지도와 스카이 뷰로 타입 전환

`MapTypeControl()`

mapTypeControl = new kakao.maps.MapTypeControl();


지도 위에 레이어를 두는 형식으로 컨트롤을 구성하게 되는 추가적인 컨트롤이다.
맵 위에 구성하겠다는 설정을 하지 않으면 시각적으로 확인이 불가능하다.

지도 타입 컨트롤을 지도 위에 올리기(즉, 지도에 표시)

map.addControl(mapTypeControl);
map.addControl(mapTypeControl, kakao.maps.ControlPosition.TOPRIGHT);


우측 상단에 지도 타입 컨트롤이 위치하도록 설정한 것이다.
이전에 Positon 을 지정하지 않았을 때와 동일한 것으로 미루어 보아 default 값임을 알 수 있다.


 

KakaoMapApp


 

실행결과 스크린샷

MapTest00.html - 지도가 정상적으로 보임


WebContent

MapTest00.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest00.html</title>
</head>
<body>

<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->

<!-- 
중심 좌표를 알아야, 어느 범위의 지도가 필요한지를 알 수 있다.
중심 좌표 외에도, 좌측 상단, 우측 상단 좌표를 동시에 받아와서 처리할 수도 있지만
범용적으로 사용되는 것은 중심 좌표이다.

[dapi] : daum api 를 줄인 것.
 -->

<div>
	<h1>Kakao Map 생성 기본 관찰</h1>
	<p>지도 생성 기본 내용 관찰</p>
	<hr>
</div>

<!-- 지도를 그릴 (랜더링 할) div 공간 확보(지정) -->
<div id="map" style="width: 100%; height: 350px;"></div>

<!-- <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY 사용"></script> -->
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>

<script type="text/javascript">

	var mapContainer = document.getElementById("map");			// 지도를 표시할 div
	var mapOption = 
	{
		center: new daum.maps.LatLng(37.5566126, 126.9196347),	// 지도의 중심좌표
		level: 3,												// 지도의 확대축소 레벨
	};
	
	// 지도를 표시할 div 와 지도 옵션을 활용하여 지도 생성
	var map = new daum.maps.Map(mapContainer, mapOption);

</script>


</body>
</html>

 


실행결과 스크린샷

MapTest01.html - 스크립트단을 이동시키자 지도가 그려지지 않음

 


WebContent

MapTest01.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest01.html</title>

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>

<script type="text/javascript">

	var mapContainer = document.getElementById("map");			// 지도를 표시할 div
	var mapOption = 
	{
		center: new daum.maps.LatLng(37.5566126, 126.9196347),	// 지도의 중심 좌표
		level: 3,												// 지도의 확대축소 레벨
	};
	
	// 지도를 표시할 div 와 지도 옵션을 활용하여 지도 생성
	var map = new daum.maps.Map(mapContainer, mapOption);

</script>

</head>
<body>

<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->


<div>
	<h1>Kakao Map 생성 기본 관찰</h1>
	<p>지도 생성 기본 내용 관찰 → 지도 그려지지 않음~!!!</p>
	<hr>
</div>

<!-- 지도를 그릴 (랜더링 할) div 공간 확보(지정) -->
<div id="map" style="width: 100%; height: 350px;"></div>


<!-- check~!!! -->
<!-- 지도가 그려지지 않음~!!! -->

<!-- <script> 를 실행할만한 트리거와 같은 것을 구성하지 않았기 때문에
     실행되지 않은 것이다.
     MapTest00.html 에서는 body를 읽어들이는 과정에서 스크립트가 실행됐기 때문에
     지도가 그려졌던 것이다.
-->


</body>
</html>

실행결과 스크린샷

MapTest02.html


WebContent

MapTest02.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest02.html</title>

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>

<script type="text/javascript">
	
	function initialize()
	{
		container = document.getElementById("map");
		
		options = 
		{
			//            경로    클래스
			//         ───── ******
			center: new kakao.maps.LatLng(37.5566126, 126.919634),	// 지도의 중심 좌표
			level: 3,												// 지도의 확대 축소 레벨
		};
		
		// 지도를 그릴 대상 div 와 옵션을 넘겨주며 지도 생성
		map = new kakao.maps.Map(container, options);
	}

</script>

</head>
<body onload="initialize()">

<div>
	<h1>Kakao Map 생성 기본 관찰</h1>
	<p>지도 생성 기본 내용 관찰</p>
	<hr>
</div>

<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->


<!-- 지도를 그릴 div 공간 확보(지정) -->
<div id="map" style="width: 100%; height: 350px;"></div>

</body>
</html>

 


실행 결과 스크린샷

MapTest03.hmtl


WebContent

MapTest03.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest03.html</title>

</head>
<body>

<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->

<div>
	<h1>Kakao Map 생성 기본 관찰</h1>
	<p>지도 생성 기본 내용 관찰</p>
	<hr>
</div>

<!-- 지도를 그릴 div 공간 확보(지정) -->
<div id="map" style="width: 300px; height: 300px;"></div>

<!-- 발급받은 key 를 활용하여 리소스 참조 -->
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>


<script type="text/javascript">
	
	// 지도를 표시할 div
	var container = document.getElementById("map");
	
	// latitude  : 위도
	// longitude : 경도
	var options =
	{
		// 지도의 중심 좌표
		//center: new daum.maps.LatLng(37.5566126,126.9196347),		//-- 구 버전
		center: new kakao.maps.LatLng(37.5566126,126.9196347),
		
		// 지도의 확대축소 레벨
		// (cf. GoogleMap 이나 NaverMap 은 level 이 아니라 zoom 으로 구성)
		level: 3,
			
	};
	
	// 지도를 그릴 대상 div 와 관련 옵션을 넘겨주며 지도 생성
	//var map = new daum.maps.Map(container, options);				//-- 구 버전
	var map = new kakao.maps.Map(container, options);
</script>

</body>
</html>

 

실행결과 스크린샷

0123456789
MapTest04.html

 


WebContent

MapTest04.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest04.html</title>

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>

<script type="text/javascript">

	function initialize()
	{
		// 전부 전역변수로 선언해 둔 상태
		container = document.getElementById("map");
		options =
		{
			center: new kakao.maps.LatLng(37.5566126,126.9196347),
			level: 3,
		};
		
		map = new kakao.maps.Map(container, options);
	}
	
	function setCenter()
	{
		// 확인 
		//alert("함수 호출 확인~!!!");
		
		// 중심을 이동할 위도 경도 위치 생성(라인 프렌즈)
		var moveLatLng = new kakao.maps.LatLng(37.5555359,126.9215387);
		//--> 아직까지는 객체 구성만 이루어진 상태이다. center 값이 반영되지 않는다.
		
		// 지도 중심 이동
		map.setCenter(moveLatLng);
		//--> 좌표 값으로 구성된 객체를 매개변수로 넘겨서 지도 중심이 이동된다.
		
		
	}
	
	function panTo()
	{
		// 중심을 이동할 위도 경도 위치 생성(2번출구 앞 스타벅스)
		var moveLatLng = new kakao.maps.LatLng(37.5571496,126.9236038);
		
		// 지도 중심 이동
		//map.setCenter(moveLatLng);
		
		// 지도 중심을 부드럽게 이동
		//-- 이동 과정에서 이동할 거리가 지도에서 표현되는 범위 밖에 있다면
		//   즉, 이동 거리가 지도 화면보다 크다면
		//   부드러운 효과가 적용되지 않고 이동하게 된다.
		map.panTo(moveLatLng);
		
	}
	
	function panTo2()
	{
		// 중심을 이동할 위도 경도 위치 생성(홍대입구 사거리 북창동 순두부)
		var moveLatLng = new kakao.maps.LatLng(37.5551839,126.9209445);
		map.panTo(moveLatLng);
	}
	
	function panTo3()
	{
		// 중심을 이동할 위도 경도 위치 생성(여의도 국회의사당)
		var moveLatLng = new kakao.maps.LatLng(37.5317348,126.9142102);
		map.panTo(moveLatLng);
	}
	
</script>


</head>
<body onload="initialize()">


<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->

<div>
	<h1>Kakao Map 중심 좌표 이동</h1>
	<ul>
		<li>지도 객체의 메소드를 통해 지도를 원하는 좌표로 이동시킬 수 있다.</li>
		<li>표시되고 있는 영역을 벗어나지 않는 거리 내에서
		애니메이션 효과처럼 지도를 부드럽게 이동시킬 수도 있다.</li> 
	</ul>
	<hr>
</div>

<!-- 지도 그려질 공간 -->
<div id="map" style="width: 100%; height: 350px;"></div>

<p>
	<button type="button" onclick="setCenter()">중심 좌표 이동</button>
	<!-- <button type="button" onclick="panTo()">중심 좌표 다시 이동</button> -->
	<button type="button" onclick="panTo()">중심 좌표 스벅으로 부드럽게 이동</button>
	<button type="button" onclick="panTo2()">중심 좌표 순두부로 부드럽게 이동</button>
	<button type="button" onclick="panTo3()">중심 좌표 국회의사당으로 부드럽게 이동</button>
	
</p>




</body>
</html>

실행결과 스크린샷

 

01234567
MapTest05.html - 지도의 레벨 제어


WebContent

MapTest05.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest05.html</title>

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>

<script type="text/javascript">

	function initialize()
	{
		container = document.getElementById("map");
		options =
		{
			center: new kakao.maps.LatLng(37.5565334,126.9195265),	// 풍성빌딩
			lever: 3,												// 지도 확대축소 레벨
		};
		
		map = new kakao.maps.Map(container, options);
		
		// 지도 레벨 표시 함수 호출
		displayLevel();
	}
	
	// 지도 레벨 표시 함수 정의
	function displayLevel()
	{
		var levelEl = document.getElementById("mapLevel");
		levelEl.innerHTML = "현재 지도 레벨은 " + map.getLevel() + " 레벨 입니다.";
	}
	
	// ※ 지도의 레벨은 지도의 확대축소 수준을 의미한다.
	//    지도의 레벨(1 ~ 14)은 숫자가 작을 수록 지도의 확대 수준이 높다.
	
	// 지도 레벨 -1(낮추기, 확대)
	function zoomIn()
	{
		// 현재의 지도 레벨 얻어오기
		var level = map.getLevel();
		
		// 얻어온 지도의 현재 레벨에서 1 내리기(→ 지도 확대)
		map.setLevel(level - 1);
		
		// 지도 레벨 표시 함수 호출
		displayLevel();
		
	}
	
	// 지도 레벨 +1(높이기, 축소)
	function zoomOut()
	{
		// 현재의 지도 레벨 얻어오기
		var level = map.getLevel();
		
		// 얻어온 지도의 현재 레벨에서 1 올리기(→ 지도 축소)
		map.setLevel(level + 1);
		
		// 지도 레벨 표시 함수 호출
		displayLevel();
		
	}
	
	
	
	
</script>

</head>
<body onload="initialize()">

<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->

<div>
	<h1>Kakao Map 레벨 전환</h1>
	<hr>
</div>

<!-- 지도를 그릴 공간 확보(지정) -->
<div id="map" style="width: 100%; height: 350px;"></div>

<br>

<!-- 지도 레벨 확인(출력) -->
<span id="mapLevel"></span>

<p>
	<button type="button" onclick="zoomIn()">지도 레벨 -1(낮추기, 확대)</button>
	<button type="button" onclick="zoomOut()">지도 레벨 +1(높이기, 축소)</button>
</p>






</body>
</html>

 


 

실행결과 스크린샷

012345678910
MapTest06.html - 지도의 정보 확인하기


WebContent

MapTest06.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MapTest06.html</title>

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=f14679fbdf06ac31ce61d88a87c1e662"></script>

<script type="text/javascript">

	function initialize()
	{
		container = document.getElementById("map");
		options = 
		{
			center: new kakao.maps.LatLng(37.5565334,126.9195265),
			level: 3,
		};
		
		map = new kakao.maps.Map(container, options);
		
		// 지도 타입 컨트롤 생성
		//-- 일반 지도와 스카이 뷰로 타입 전환
		mapTypeControl = new kakao.maps.MapTypeControl();
		//--> 지도 위에 레이어를 두는 형식으로 컨트롤을 구성하게 되는데
		//    이러한 추가적인 컨트롤은 맵 위에 구성하겠다는 설정을 하지 않으면
		//    시각적으로 확인이 불가능하다.
		
		// 지도 타입 컨트롤을 지도 위에 올리기(즉, 지도에 표시)
		//map.addControl(mapTypeControl);
		map.addControl(mapTypeControl, kakao.maps.ControlPosition.TOPRIGHT);
		// 우측 상단에 지도 타입 컨트롤이 위치하도록 설정한 것이다.
		// 이전에 Positon 을 지정하지 않았을 때와 동일한 것으로 미루어 보아
		// default 값임을 알 수 있다.
		
		
	}
	
	function getInfo()
	{
		// 지도의 현재 중심 좌표 얻어오기
		var center = map.getCenter();
		
		// 지도의 현재 레벨 얻어오기
		var level = map.getLevel();
		
		// 지도의 타입 얻어오기
		var mapType = map.getMapTypeId();
		
		// 지도의 현재 영역 얻어오기
		var bounds =  map.getBounds();
		
		// 얻어낸 현재 영역의 남서쪽 좌표 얻어오기
		var swLatLng = bounds.getSouthWest();
		
		// 얻어낸 현재 영역의 북동쪽 좌표 얻어오기
		var neLatLng = bounds.getNorthEast();
		
		var message = "지도의 중심 좌표는 " + center + " 입니다.<br>";
		message += "위도는 " + center.getLat();
		message += ", 경도는 " + center.getLng() + " 인거죠~<br>";
		message += "지도 레벨은 " + level + " 이며, ";
		message += "지도 타입은 " + mapType + " 입니다.<br>";
		message += "지도의 현재 영역은 " + bounds + " 입니다.<br>";
		message += "지도의 남서쪽 좌표는 " + swLatLng.getLat();
		message += ", " + swLatLng.getLng() + " 이고, <br>";
		message += "지도의 북동쪽 좌표는 " + neLatLng.getLat();
		message += ", " + neLatLng.getLng() + " 인거죠~<br>";
		
		
		
		var typeEl = document.getElementById("mapType");
		typeEl.innerHTML = message;
	}
	
</script>

</head>
<body onload="initialize()">

<!-- ○ 발급받은 App Key -->
<!-- appKey=f14679fbdf06ac31ce61d88a87c1e662 -->
<!-- ○ 지도의 중심 좌표 -->
<!-- 37.5566126,126.9196347 -->

<div>
	<h1>Kakao Map 지도 정보 얻어내기</h1>
	<hr>
</div>

<!-- 지도를 그릴 공간 확보(지정) -->
<div id="map" style="width: 100%; height: 350px;"></div>
<br>

<p>
	<button type="button" onclick="getInfo()">지도 정보 확인</button>
	<br>
	<br>
	
	
	<span id="mapType"></span>
</p>

</body>
</html>