[카카오 지도 API 얻어오는 과정]
1. https://developers.kakao.com/
카카오 개발자
2. 내 어플리케이션 - 어플리케이션 추가하기
3. 앱 키중 자바스크립트 앱 키 사용
4. 플랫폼 설정하기
사이트 도메인 등록: [웹] 플랫폼을 선택하고, [사이트 도메인] 을 등록합니다.
(예: http://localhost:8080)
그 다음부터 문서에서 API사용법 보고 진행(지도/로컬 -문서보기-Maps API텍스트 클릭-Web 이미지 클릭)
틀은 얻어온 HTML 문서로 !
<fieldset>
<legend id="main"> 현재 위치를 지도에 표시하기 </legend>
<div id="map" style="height:500px;border-radius:20px; "></div>
지도 레벨<input type="range" min='1' max="14" value="3" id="range"/>
</fieldset>
<hr style="width:70%"/>
<fieldset>
<legend>주소로 위치 찾기</legend>
<div>
<input id='address' type='search' placeholder="주소를 입력하세요" autofocus list="data_list"/>
<datalist id="data_list">
<option value="가산디지털2로 123 월드메르디앙2차"></option>
<option value="가로수길 5"></option>
<option value="벚꽃로 309 가산디지털단지역"></option>
<option value="양화로 160 홍대입구역"></option>
<option value="한강대로 405 서울역"></option>
</datalist>
<button onclick='searchByAddress()'>주소찾기</button>
<button onclick='zoomIn()'>줌인</button>
<button onclick='zoomOut()'>줌아웃</button>
현재 지도 레벨은 <span id="maplevel" style="font-weight: bold; font-size:1.4em; color: green;"></span>레벨.
</div>
</fieldset>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=6680e56e3c1832d5cc285864a7025d82&libraries=services"></script>
<script>
1. 지도 띄우는 코드작성(샘플코드)
<script>
//지도 띄우는 코드작성(샘플코드)
var container = document.getElementById('map');
var options = {
center: new kakao.maps.LatLng(37.4730836, 126.8788276),
level: 3
};
var map = new kakao.maps.Map(container, options);
</script>
2.저건 너무 간단하고 기능도 없음 이제 기능 하나하나씩 추가하면서 지도를 만들것임
레벨조절용 연결 & positioniption 객체 설정하기(하드코딩을 없애기 위해)
var map;
var markers=[];
//지도 레벨 조절용
var range = document.getElementById('range'); //볼륨조절하듯이 지도 확대/축소 할 수 있게 할거
var maplevel = document.getElementById("maplevel");
maplevel.textContent=range.value; // 확대/축소 할 때 밑에 숫자도 같이 적용될 수 있게 연결해 놈
if(navigator.geolocation){ //브라우저의 geolocation지원하는지여부 판단
//positionoption 객체설정용
var options = {'timeout':3000, 'maximumAge':5000};
//한 번 얻기
navigator.geolocation.getCurrentPosition(function(position){
var lat = position.coords.latitude;
var lng = position.coords.longitude;
showKaKaoMap(lat,lng);
});
}
현재 위치의 위도/경도를 중심좌표로 표시
function showKaKaoMap(lat,lng){
var container = document.getElementById('map');
var options = {
center : new kakao.maps.LatLng(lat,lng),
level : range.value,
mapTypeId : kakao.maps.MapTypeId.ROADMAP//kakao.maps.MapTypeId.HYBRID//kakao.maps.MapTypeId.SKYVIEW//kakao.maps.MapTypeId.ROADMAP
};
map = new kakao.maps.Map(container,options);
//Sample - "오버레이"의 마커 생성하기
//지도에 마커표시하기(함수는 밑으로 뺌)
setMarker(lat,lng,'<div style="padding:5px;font-size:.7em;">현재 나의 위치!</div>');
}
마커를 표시하는 함수(setMarker 정의)
function setMarker(lat,lng,content){
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
position: new kakao.maps.LatLng(lat,lng),
draggable: false, //마커움직이지 않게(드레그x)
clickable: true //클릭은 가능하게!
});
//마커객체를 배열에 저장
var markerObj={};
markerObj['marker'+markers.length]=marker;
markers.push(markerObj);
// 마커가 지도 위에 표시되도록 설정합니다
marker.setMap(map);
//마커에 클릭 이벤트 등록하기
setMarkerClick(content); //(역시 함수는 밑에서 생성)
}/////setMarker
마커 클릭이벤트 등록
function setMarkerClick(content){
// 인포윈도우를 생성합니다
var infowindow = new kakao.maps.InfoWindow({
content : content,
removable : true
});
// 마커에 클릭이벤트를 등록합니다
markers[markers.length-1].info = infowindow;
console.log('markers[0]:',markers[0]); //{'marker0':marker객체,info:info윈도우객체}
var key='marker'+(markers.length-1);
kakao.maps.event.addListener(markers[0][key],'click',function() {
// 마커 위에 인포윈도우를 표시합니다
infowindow.open(map, markers[0][key]);
});
}//////setMarkerClick
주소 검색하여 찾기
var address=document.querySelector("#address"); //라이브러리 - 주소로 장소표시하기 준비사항
function searchByAddress(){
// 주소-좌표 변환 객체를 생성합니다
var geocoder = new kakao.maps.services.Geocoder();
// 주소로 좌표를 검색합니다
geocoder.addressSearch(address.value,function(result, status) {
console.log('result',result);
console.log('status:',status);
// 정상적으로 검색이 완료됐으면
if (status === kakao.maps.services.Status.OK) {
var content="<div style='padding:5px'>"+address.value+"</div>";
var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
//기존 마커의 위치이동
markers[0]['marker'+(markers.length-1)].setPosition(coords);
//기존 마커의 인포윈도우 변경
markers[0]['info'].setContent(content);
// setMarkerClick(content);
// 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
map.setCenter(coords);
}
else{
alert(address.value+"와 일치하는 주소가 없어요");
address.value='';
address.focus();
}
});
}////searchByAddress
range 요소에 이벤트리스너 부착
range.oninput=function(e){
//지도 레벨을 e.target.value로 변경
map.setLevel(parseInt(e.target.value));
console.log(e.target.value);
console.log('지도레벨:',map.getLevel());
maplevel.textContent=e.target.value;
};
지도 레벨 줌 인/아웃 시키는 함수
//지도의 레벨을 확대시키는 함수
function zoomIn(){
// 현재 지도의 레벨 (1~14)
var level = map.getLevel();
/// 지도를 1레벨 내립니다 (지도가 확대됩니다)
if(level===1) return;
map.setLevel(level-1);
maplevel.textContent=level-1;
range.value=level-1;
}
//지도의 레벨을 축소시키는 함수
function zoomOut(){
// 현재 지도의 레벨 (1~14)을 얻어옵니다
var level = map.getLevel();
// 지도를 1레벨 올립니다 (지도가 축소됩니다)
if(level===14) return;
map.setLevel(level+1);
maplevel.textContent=level+1;
range.value=level+1;
}
'학원 > HTML5' 카테고리의 다른 글
11/08 38-5 [HTML] Geolocation_2(위치추적) (0) | 2022.11.08 |
---|---|
11/08 38-4 [HTML] Geolocation_1(현재위치) (0) | 2022.11.08 |
11/08 38-3 [HTML] WebStorage_3(개인화 메뉴 설정) (0) | 2022.11.08 |
11/08 38-2 [HTML] WebStorage_2(세션 스토리지) (0) | 2022.11.08 |
11/08 38-1 [HTML] WebStorage_1(로컬 스토리지) (0) | 2022.11.08 |