티스토리 뷰

kakao API 사용하기

api 키 발급 및 초기 설정은 아래 블로그 참고

https://rominlamp.tistory.com/20

 

[React] KaKao 지도 API / 카카오맵 사용하기

KaKao 지도 API를 사용하여 내 웹 사이트에 카카오맵을 적용해보겠습니다.  Kakao 지도 Javascript API 키 발급 및 웹 플랫폼 추가하기  Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발

rominlamp.tistory.com


지도 생성

지도 위치가 바뀔 때마다 상태를 변경해줘야 하니까 mapState를 만들어준다

초기값 좌표는 카카오 api 링크에 나온 좌표를 참고해서 넣자

function App() {
  const [mapState, setMapState] = useState({
    center: {
      lat: 33.450701,
      lng: 126.570667,
    },
    address: "",
    errMsg: "",
  });

  return (
    <div>
      <Map
        center={mapState.center}
        style={{
          width: "100%",
          height: "100vh",
        }}
        level={3}
      >
      </Map>
    </div>
  );
}

export default App;

 

https://react-kakao-maps-sdk.jaeseokim.dev/docs/sample/map/basicMap

 

지도 생성하기 | react-kakao-maps-sdk docs

지도를 생성하는 가장 기본적인 예제입니다.

react-kakao-maps-sdk.jaeseokim.dev


마커 생성

마커 상태관리를 위해 markerState를 만들고 초기값은 지도 좌표를 저장해 줬다(마커와 지도는 같은 위치에 있어야 하니까)

마커에 주소를 띄우기 위해 div에 style을 지정해 준다

 

* 지도와 마커는 같은 값을 저장하는데 따로 state를 만든 이유

처음엔 하나의 상태로 사용했지만 위치 저장 기능을 사용할 경우, 마커와 지도의 역할이 분리되어야 하기 때문에 상태를 나눠줬다

지도 - 사용자 움직임에 따라 상태가 변해야 한다

마커 - 지도 움직임에 따라 동일하게 상태가 변해야 하지만 위치를 저장할 경우 지도와 분리되어 고정 위치값을 가져야 한다

  const [markerState, setMarkerState] = useState(mapState.center);
  
  return (
    <div>
      <Map
        center={mapState.center}
        style={{
          width: "100%",
          height: "100vh",
        }}
        level={3}
      >
        <MapMarker position={markerState}>
          <div
            style={{
              display: "inline",
              padding: "10px",
              color: "#000",
            }}
          >
            {mapState.errMsg && mapState.errMsg}
          </div>
        </MapMarker>
      </Map>
    </div>
  );

 

https://react-kakao-maps-sdk.jaeseokim.dev/docs/sample/overlay/basicMarker

 

마커 생성하기 | react-kakao-maps-sdk docs

지도에 올라가는 핀 모양의 이미지를 마커라고 부릅니다. 아래 예제는 지도 위에 마커를 표시하는 기본 예제입니다.

react-kakao-maps-sdk.jaeseokim.dev


geolocation으로 현재 위치에 마커 표시

GeoLocation는 내장 API로 별도 설치 없이 사용 가능하다

위도(latitude)와 경도(longitude)를 포함한 사용자의 위치 정보를 가져올 수 있고 navigator.geolocation 객체를 통해 접근할 수 있다

 

getCurrentAddress 함수를 통해 현재 위치가 있을 경우 해당 좌표를 지도와 마커에 저장한다

useEffect으로 컴포넌트가 마운트 될 때마다 getCurrentAddress 함수를 호출해 현 위치를 표시한다

 

없을 경우 error메시지 출력

 

* getCurrentAddress 함수에서 state에 직접 객체를 담지 않고 따로 객체를 만들어서 저장한 이유

getCurrentAddress 함수에서 다른 기능을 위해 mapState를 사용할 경우, useState가 비동기적으로 작동하기 때문에 바로 반영된 상태값을 사용할 수 없기 때문

  useEffect(() => {
      getCurrentAddress();
  }, []);
  
  const getCurrentAddress = () => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        (position) => {
          const newCenter = {
            lat: position.coords.latitude,
            lng: position.coords.longitude,
          };

          setMapState((prev) => ({
            ...prev,
            center: newCenter,
          }));
          
           setMarkerState(newCenter);
        },
        (err) => {
          setMapState((prev) => ({ ...prev, errMsg: err.message }));
        }
      );
    } else {
      setMapState((prev) => ({
        ...prev,
        errMsg: "현재 위치를 찾을 수 없습니다.",
      }));
    }
  };
  const [markerState, setMarkerState] = useState(mapState.center);
  
  return (
    <div>
      <Map
        center={mapState.center}
        style={{
          width: "100%",
          height: "100vh",
        }}
        level={3}
      >
        <MapMarker position={markerState}>
          <div
            style={{
              display: "inline",
              padding: "10px",
              color: "#000",
            }}
          >
            {mapState.errMsg && mapState.errMsg}
          </div>
        </MapMarker>
      </Map>
    </div>
  );


https://react-kakao-maps-sdk.jaeseokim.dev/docs/sample/overlay/geolocationMarker

 

geolocation으로 마커 표시하기 | react-kakao-maps-sdk docs

HTML5 GeoLocation을 이용해 접속위치를 얻어오고 접속위치에 마커와 인포윈도우를 표시합니다.

react-kakao-maps-sdk.jaeseokim.dev

https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API

 

Geolocation API - Web API | MDN

Geolocation API는 사용자의 동의 하에 웹 애플리케이션에서 위치 정보에 접근할 수 있는 API입니다. 개인정보 보호를 위해, 브라우저는 위치 정보를 제공하기 전에 사용자에게 위치 정보 권한에 대

developer.mozilla.org


중심좌표 변경 이벤트 (지도가 움직이면 마커는 지도 중앙에 오도록)

centerChangeHandler 함수에 getCenter 메서드로 중심 좌표를 찾고 객체에 중심좌표 기준 위도와 경도를 담아준다

지도와 마커의 상태를 중심좌표로 변경해 준다(mapState, markerState)

  const centerChangeHandler = (map:any) => {
  const newCenter = map.getCenter();
    const newPosition = {
      lat: newCenter.getLat(),
      lng: newCenter.getLng(),
    };

    setMapState((prev) => ({
      ...prev,
      center: newPosition,
    }));
    
    setMarkerState(newPosition);
  };
  return (
    <div>
      <Map
        center={mapState.center}
        style={{
          width: "100%",
          height: "100vh",
        }}
        level={3}
        onCenterChanged={(map) => centerChangeHandler(map)}
      >
        <MapMarker position={markerState}>
          <div
            style={{
              display: "inline",
              padding: "10px",
              color: "#000",
            }}
          >
            {mapState.errMsg && mapState.errMsg}
          </div>
        </MapMarker>
      </Map>
    </div>
  );

 

https://react-kakao-maps-sdk.jaeseokim.dev/docs/sample/map/addMapCenterChangedEvent

 

중심좌표 변경 이벤트 등록하기 | react-kakao-maps-sdk docs

지도를 이동하거나, 지도 API의 특정 메소드를 호출하여 지도의 중심좌표가 변경되었을 때 center_changed 이벤트가 발생합니다.

react-kakao-maps-sdk.jaeseokim.dev

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함