본문 바로가기
Projects/matjipfind

카카오맵 API로 변경, 내위치 가져오기 기능

by DawIT 2021. 1. 14.
320x100

키워드로 주변 음식점 검색 기능을 구현하기 위해 여러가지 정보를 찾아보고 있었는데, 2020년 말부터 네이버 플레이스(음식점 정보를 제공해주는 서비스)의 URL 요청방식이 달라져서 리뷰정보를 가져올 수 없다고 한다...

 

그리고 네이버 맵 API 서비스는 키워드(국밥,불고기)로 검색하는 함수를 가지고 있지 않는 것으로 보인다. Document를 엄청 뒤져봤는데 도통 해당 기능을 찾을 수 없다.

 

그래서 카카오 맵 API 로 변경하기로 했다. 네이버에 비해 예제와 Document가 훨씬 더 간결하고 깔끔하게 나와 있다. 여기는 키워드로 검색 기능도 포함되어 있다.

 

먼저 apis.map.kakao.com/web/ 이곳에 접속한뒤,

 

 

좌측 하단의 키 발급을 선택하여 가입을 진행한다.

 

카카오계정이 등록되어 있어서 그런지 가입이 1초만에 끝났다.

 

 

시작하기 선택

 

 

어플리케이션을 추가해 준다.

 

 

기본 정보를 적당히 설정하고 저장

 

 

해당 항목을 선택하면 Key 를 얻을 수 있다.

 

이제 apis.map.kakao.com/web/wizard/ 에 접속하면,

 

 

이렇게 원하는 기능을 넣은 지도를 만들 수 있는 코드가 제공된다. 이런 점에서 네이버와 비교했을 때 정말 편하고 좋은 것 같다.

 

<script src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY를 사용하세요"></script>
	<script>
		var mapContainer = document.getElementById('map'), // 지도를 표시할 div 
		    mapOption = {
		        center: new kakao.maps.LatLng(37.56646, 126.98121), // 지도의 중심좌표
		        level: 4, // 지도의 확대 레벨
		        mapTypeId : kakao.maps.MapTypeId.ROADMAP // 지도종류
		    }; 

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

	</script>

 

다른 기능은 일단 넣지 않고 기본적인 코드만 가져와서 적용한다. 일단은 HTML에 포함시켜서 작성해본다.

 

발급받은 API 키는 REST API 키를 이용하면 된다.

 

 

잘 적용되었다. 이제 내 위치 가져오기 기능을 만들 것인데.. 먼저 버튼을 만들자.

 

버튼은 간단하게 부트스트랩에서 primary 버튼을 가져올 것이다. CDN 방식을 통해 소스를 다운받지 않고 로드하여 사용할 것이다.

 

<!-- 부트스트랩 primary 버튼 -->
<button type="button" class="btn btn-lg btn-primary" id="getMyPositionBtn">내 위치 가져오기</button>

<!-- 부트스트랩 이용을 위한 jQuery와 CDN -->
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>

 

부트스트랩은 jQuery를 사용하기 때문에 jQuery도 포함시켜 주었다.

 

해당 코드를 추가하면

 

 

이렇게 오른쪽 사이드바에 '내 위치 가져오기' 버튼이 생긴다. 디자인은 투박하지만.. 없는거 보단 낫다.

 

이제 내 위치 가져오기 버튼에 기능을 추가한다.

 

 

resources/static 폴더에 map.js 추가

 

var mapContainer = document.getElementById('map'), // 지도를 표시할 div
    mapOption = {
        center: new kakao.maps.LatLng(37.56646, 126.98121), // 지도의 중심좌표
        level: 3, // 지도의 확대 레벨
        mapTypeId : kakao.maps.MapTypeId.ROADMAP // 지도종류
    };

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

function locationLoadSuccess(pos){
    // 현재 위치 받아오기
    var currentPos = new kakao.maps.LatLng(pos.coords.latitude,pos.coords.longitude);

    // 지도 이동(기존 위치와 가깝다면 부드럽게 이동)
    map.panTo(currentPos);

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

    // 기존에 마커가 있다면 제거
    marker.setMap(null);
    marker.setMap(map);
};

function locationLoadError(pos){
    alert('위치 정보를 가져오는데 실패했습니다.');
};

// 위치 가져오기 버튼 클릭시
function getCurrentPosBtn(){
    navigator.geolocation.getCurrentPosition(locationLoadSuccess,locationLoadError);
};

 

위치 정보를 가져오기 위한 코드를 추가한다. 기존 HTML에 있던 맵 생성 코드도 이쪽으로 가져온다.

 

 

기존 버튼에 onclick으로 getCurrentPosBtn 함수를 추가해주면 된다.

댓글