: Kakao Maps API๋ฅผ react์ ๋ง๊ฒ ํฌํ
ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ReactKakaoMapSKD
npm install react-kakao-maps-sdk
<script>
ํ๊ทธ ์ถ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ์์ ์ผ๋ก Kakao Maps API๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.
API ํค ๋ฐ๊ธ๋ฐ๋ ๋ฒ
<script
type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=๋ฐ๊ธ๋ฐ์ APP KEY"
></script>
import { Map } from 'react-kakao-maps-sdk';
const App = () => {
return (
<Map
center={{ lat: 33.5563, lng: 126.79581 }} // ์ง๋์ ์ค์ฌ ์ขํ
style={{ width: '800px', height: '600px' }} // ์ง๋ ํฌ๊ธฐ
level={3} // ์ง๋ ํ๋ ๋ ๋ฒจ
>
</Map>);
};
import { Map, MapMarker } from 'react-kakao-maps-sdk';
const App = () => {
return (
<Map
center={{ lat: 33.5563, lng: 126.79581 }}
style={{ width: '800px', height: '600px' }}
level={3}
>
<MapMarker position={{ lat: 33.55635, lng: 126.795841 }}> </MapMarker> // ๋ง์ปค ์ขํ
</Map>
);
};
import { Map, MapMarker } from 'react-kakao-maps-sdk';
const App = () => {
const locations = [
{ title: '์นด์นด์ค', latlng: { lat: 33.450705, lng: 126.570677 } },
{ title: '์ํ์ฐ๋ชป', latlng: { lat: 33.450936, lng: 126.569477 } },
{ title: 'ํ
๋ฐญ', latlng: { lat: 33.450879, lng: 126.56994 } },
{ title: '๊ทผ๋ฆฐ๊ณต์', latlng: { lat: 33.451393, lng: 126.570738 } },
];
return (
<Map center={{ lat: 33.450701, lng: 126.570667 }} style={{ width: '800px', height: '600px' }} level={3}>
{locations.map((loc, idx) => (
<MapMarker
key={`${loc.title}-${loc.latlng}`}
position={loc.latlng}
image={{
src: 'https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png',
size: { width: 24, height: 35 },
}}
title={loc.title}
/>
))}
</Map>
);
};
import { Map, CustomOverlayMap } from 'react-kakao-maps-sdk';
const App = () => {
return (
<Map
center={{ lat: 33.5563, lng: 126.79581 }}
style={{ width: '800px', height: '600px' }}
level={3}
>
<CustomOverlayMap position={{ lat: 33.55635, lng: 126.795841 }}>
<div className='overlay'>Here!</div>
</CustomOverlayMap>
</Map>
);
};
import './App.css';
import React, { useState } from 'react';
import { Map, CustomOverlayMap } from 'react-kakao-maps-sdk';
const App = () => {
const [level, setLevel] = useState(3);
return (
<Map
center={{ lat: 33.5563, lng: 126.79581 }}
style={{ width: '800px', height: '600px' }}
level={level}
>
<CustomOverlayMap position={{ lat: 33.55635, lng: 126.795841 }}>
<div className='overlay'>Here!</div>
</CustomOverlayMap>
<button onClick={() => setLevel(level + 1)}>-</button>
<button onClick={() => setLevel(level - 1)}>+</button>
</Map>
);
};
: ์ฌ์ฉ์์ ์์น ์ ๋ณด๋ฅผ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ณตํ ์ ์๋ API
๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ์ํด์ ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์์๊ฒ ์์น ์ ๋ณด์ ๋ํ ๊ถํ์ ๋ฐ์ ํ ์์น ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Geolocation.getCurrentPosition()
: ๊ธฐ๊ธฐ์ ํ์ฌ ์์น๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋Geolocation.watchPosition()
: ๊ธฐ๊ธฐ์ ์์น๊ฐ ๋ฐ๋ ๋๋ง๋ค, ์๋ก์ด ์์น๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถํ๋ค.import React, { useState, useEffect } from 'react';
import { Map, MapMarker } from 'react-kakao-maps-sdk';
const App = () => {
const [location, setLoacation] = useState(null); // ํ์ฌ ์์น๋ฅผ ์ ์ฅํ ์ํ
useEffect(() => {
navigator.geolocation.getCurrentPosition(successHandler, errorHandler); // ์ฑ๊ณต์ successHandler, ์คํจ์ errorHandler ํจ์๊ฐ ์คํ๋๋ค.
}, []);
const successHandler = (response) => {
console.log(response); // coords: GeolocationCoordinates {latitude: ์๋, longitude: ๊ฒฝ๋, โฆ} timestamp: 1673446873903
const { latitude, longitude } = response.coords;
setLoacation({ latitude, longitude });
};
const errorHandler = (error) => {
console.log(error);
};
return (
<>
{location && (
<Map
center={{ lat: location.latitude, lng: location.longitude }}
style={{ width: '800px', height: '600px' }}
level={3}
>
<MapMarker position={{ lat: location.latitude, lng: location.longitude }} />
</Map>
)}
</>
);
};
*์์์ ์ขํ์
๋๋ค
useRef()
๋ฅผ ์ฌ์ฉํด Map ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ , ref ๊ฐ์ฒด์ current ๊ฐ์ ์ ๊ทผํด ํด๋น Map ๊ฐ์ฒด์ ์ค์ฌ ์ขํ๋ฅผ ์ป์ ์ ์๋ค.
import React, { useState, useRef } from 'react';
import { Map, MapMarker } from 'react-kakao-maps-sdk';
const App = () => {
const [coordinates, setCoordinates] = useState(null); // ํ์ฌ ์์น์ ์ขํ๊ฐ์ ์ ์ฅํ ์ํ
const mapRef = useRef();
const getCoordinates = () => {
const map = mapRef.current;
setCoordinates({
center: {
lat: map.getCenter().getLat(),
lng: map.getCenter().getLng(),
},
});
};
return (
<>
<Map
center={{ lat: 37.5566803113882, lng: 126.904501286522 }}
style={{ width: '800px', height: '600px' }}
level={3}
ref={mapRef}
>
<MapMarker position={{ lat: 37.5566803113882, lng: 126.904501286522 }} />
<button onClick={getCoordinates}>ํ์ฌ ์์น ์ขํ ์ป๊ธฐ</button>
</Map>
{coordinates && (
<div>
ํ์ฌ ์์น์ ์ขํ๋..
<p>์๋ : {coordinates.center.lat}</p>
<p>๊ฒฝ๋ : {coordinates.center.lng}</p>
</div>
)}
</>
);
};
<script>
ํ๊ทธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ<script>
ํ๊ทธ์ &libraries=services
๋ฅผ ์ถ๊ฐํ๋ค.
<script
type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=๋ฐ๊ธ๋ฐ์ APP KEY&libraries=services"></script>
const { kakao } = window;
์ถ๊ฐReact์์ Kakao Maps API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด window.kakao
๋ก ์ฌ์ฉํด์ผ ํ๋๋ฐ,
์์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ์ผ์ผํ window.
๋ฅผ ๋ถ์ด์ง ์์๋ ๋๋ค.
import React, { useState } from 'react';
import { Map, MapMarker } from 'react-kakao-maps-sdk';
const App = () => {
const { kakao } = window;
const [address, setAddress] = useState(null); // ํ์ฌ ์ขํ์ ์ฃผ์๋ฅผ ์ ์ฅํ ์ํ
const getAddress = (lat, lng) => {
const geocoder = new kakao.maps.services.Geocoder(); // ์ขํ -> ์ฃผ์๋ก ๋ณํํด์ฃผ๋ ๊ฐ์ฒด
const coord = new kakao.maps.LatLng(37.5566803113882, 126.904501286522); // ์ฃผ์๋ก ๋ณํํ ์ขํ ์
๋ ฅ
const callback = function (result, status) {
if (status === kakao.maps.services.Status.OK) {
setAddress(result[0].address);
}
};
geocoder.coord2Address(coord.getLng(), coord.getLat(), callback);
};
return (
<>
<Map center={{ lat: 37.5566803113882, lng: 126.904501286522 }} style={{ width: '800px', height: '600px' }} level={3}>
<MapMarker position={{ lat: 37.5566803113882, lng: 126.904501286522 }} />
<button onClick={getAddress}>ํ์ฌ ์ขํ์ ์ฃผ์ ์ป๊ธฐ</button>
</Map>
{address && (
<div>
ํ์ฌ ์ขํ์ ์ฃผ์๋..
<p>address_name: {address.address_name}</p>
<p>region_1depth_name: {address.region_1depth_name}</p>
<p>region_2depth_name: {address.region_2depth_name}</p>
<p>region_3depth_name: {address.region_3depth_name}</p>
</div>
)}
</>
);
};
์ ๋ณด ๊ฐ์ฌํฉ๋๋ค!