4번째 팀 프로젝트
2024/06/18 팀프로젝트(Festiall) : 상세페이지 - 3 카카오 맵 API
고래고래00
2024. 6. 18. 21:00
이번에는 카카오 맵 API를 이용해서 행사 장소를 지도로 보여주기
일단 결과
카카오 맵 API를 이용하기 위해서는 먼저
https://apis.map.kakao.com/web/guide/
여기에 나와있는대로 그대로 잘 따라해주면 API 키를 발급받을 수 있다.
(공식문서라 기본적인 사용법도 나와있음)
발급받은 API키를 토대로 자바스크립트 API를 가져오기
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY를 넣으시면 됩니다."></script>
(참고로 나의 경우에는 리액트로 작업해서 루트 index.html에 삽입해줬다.)
이제 카카오 맵을 import하고 사용해주기
import { Map, MapMarker } from 'react-kakao-maps-sdk';
...
return (...
<Map // 지도 보여주기
center={{ lat: 위도, lng: 경도 }}
style={{
width: "1280px",
height: '500px',
borderRadius: '20px',
}}
>
<MapMarker // 특정 위치 찝어주기
style={{
border: 'tranparent'
}}
position={{ lat: 위도, lng: 경도 }}
>행사장소
</MapMarker>
</Map>
...)
근데 행사 위치의 위도랑 경도를 어떻게 구하지?
역시 큰 회사라 그런가 주소만 입력하면 해당 주소의 위도와 경도를 알려주는 API도 있었다.
(단, 정확한 주소 입력해야함)
geocoder 이용하기
https://apis.map.kakao.com/web/sample/addr2coord/
정확하고 자세한 사용법은 역시 공식문서
공식문서를 참고해서 인풋으로 받은 주소로 위도와 경도 받아내기
const geocoder = new kakao.maps.services.Geocoder();
geocoder.addressSearch(place?.address, (result, status) => {
if (status === kakao.maps.services.Status.OK) {
const newCoords = new kakao.maps.LatLng(result[0].y, result[0].x);
setLat(newCoords.Ma);
setLng(newCoords.La);
}
}
근데 이렇게 하니까 또 다시 무한 렌더링 => useEffect안에 넣어주기로 해결했는데
또 다른 문제 지도가 렌더링이 안된다.
<Map
center={{ lat, lng }}
style={{
width: "1280px",
height: '500px',
borderRadius: '20px',
}}
>
<MapMarker
style={{
border: 'tranparent'
}}
position={{ lat, lng }}
>행사장소
</MapMarker>
</Map>
흠.. 분명 콘솔로 확인했을 때, state는 제대로 바뀌는데
const FestMap = () => {
return (
<Map
center={{ lat, lng }}
style={{
width: "1280px",
height: '500px',
borderRadius: '20px',
}}
>
<MapMarker
style={{
border: 'tranparent'
}}
position={{ lat, lng }}
>행사장소
</MapMarker>
</Map>
);
};
return (...
<FestMap></FestMap>
...)
이렇게 바꾸니 매우 매우 잘 된다.
무슨 차이일까
왜 따로 빼놔서 return문에 넣어주면 잘 되고 바로 return문에 넣으면 안 될까