react-google-maps
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์ฉ@react-google-maps/api
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์ฉ.env
ํ์ผ์ ๋ฐ๊ธ๋ฐ์ Google API Key ์ถ๊ฐ
<div className="h-40 border border-blue-500">
<LoadScript googleMapsApiKey="๋ฐ๊ธ๋ฐ์ key">
<GoogleMap
mapContainerStyle={containerStyle}
center={center}
zoom={10}
>
{/* Child components, such as markers, info windows, etc. */}
<></>
</GoogleMap>
</LoadScript>
)
</div>
ํ๋
, ์ถ์
, ์ ์ฒด๋ณด๊ธฐ
, ์์ฑ๋ชจ๋
๋ฑ์ ๊ธฐ๋ณธ ui๋ฒํผ๋ค์ด ์๋ค.disableDefaultUI: true
: ๊ธฐ๋ณธ ui ์ ์ฒด๋ฅผ ์์ ์ค๋ค.ex)
<GoogleMap
...
options={{disableDefaultUI: true}}
...
>
</GoogleMap>
5-1-2. ์ง๋์ ์ปจํธ๋กค ์์ ์ถ๊ฐํ๊ธฐ
zoomControl: boolean,
mapTypeControl: boolean,
scaleControl: boolean,
streetViewControl: boolean,
rotateControl: boolean,
fullscreenControl: boolean ๋ฑ....
ex)
...
<GoogleMap
...
options={{ streetViewControl: true, styles: myStyles }}
// ๋๋ ์์ฑ๋ทฐ๋ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์
// streetViewControl์ true๋ก ์ค์ ํจ.
...
>
</GoogleMap>
...
๊ธฐ๋ณธ์ ์ผ๋ก ์์์ , ๋ช
์ ๋ฑ ๋ง์ปค๊ฐ ๋ค ๋ธ. => option
์ styles
๋ฅผ ์ง์ ํ์ฌ ์ง์ ๋ถํ ๋ง์ปค๋ค์ ๋ค ์ง์ธ ์ ์์.
ex)
const myStyles = [
{
featureType: "poi",
elementType: "labels",
stylers: [{ visibility: "off" }],
},
];
// featureType, elementType๋ก
// styler๋ฅผ ์ถ๊ฐํ์ฌ ์ ํํ ์งํ์ง๋ฌผ๊ณผ ์์์ ์ ์ฉํ ๊ท์น์ ์ ํ ์์์.
...
<GoogleMap
...
options={{ disableDefaultUI: true, styles: myStyles }}
...
>
</GoogleMap>
...
const center = useMemo(() => ({ lat: 12.345, lng: 678.91 }), []);
...
<GoogleMap ~~~>
<MarkerF position={center} />
// ๋๋ ๊ธฐ๋ณธ ๋ง์ปค๋ง ์ธ๊ฑฐ๋ผ์ ์ต์
์ ๋ถ ๋บ.
// ๐ position (ํ์์ต์
!) = ๋ง์ปค์ ์์น
// ๐ custom Marker์ฌ์ฉ์ ๋ง์ปค ์ถ๊ฐ ์ ํ์ต์
// map = ๋ง์ปค๋ฅผ ๋ฐฐ์นํ Map์ ์ง์ ex) map={myMap1}
// ๋ง์ปค์ setMap() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ง์ปค ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ๋ฅ.
// title = ๋ง์ปค์ ์ค๋ช
ex) title:"Hello World!"
// icon, path, scale, anchor, rotaion, fillColor ๋ฑ๋ฑ..
</GoogleMap>
...
ํ์ฌ ์์น๊ฐ์ ๋ฐ๊ธฐ ์ํด ๋๋ถ๋ถ
๋๋ ์ผ๋จ ๊ฐ๋จํ๊ฒ,,(์ด๊ฒ ๋ง๋ ์ถ๊ธดํจ.. ์๋ฌดํผ ์ขํ๊ฐ์ด ์ ๋ถ๋ฌ์์ง๊ธด ํด์ ์..)
๐ ํฌ๋กฌ์์ getCurrentPosition ๋ฉ์๋๋ https์ localhost์์๋ง ๋์ํจ.
const [lat, setLat] = React.useState(0);
const [lng, setLng] = React.useState(0);
const markerPosition = { lat, lng };
const getLocation = () => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
console.log(`Position.Latitude ์๋ : ${position.coords.latitude}`);
setLat(position.coords.latitude);
console.log(`Position.longitude ๊ฒฝ๋ : ${position.coords.longitude}`);
setLng(position.coords.longitude);
},
(error) => {
console.error(error);
},
{
enableHighAccuracy: false,
maximumAge: 0,
timeout: Infinity,
}
);
} else {
alert("GPS๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ค์ ์ ํ์ธํ์ธ์.");
}
};
React.useEffect(() => {
getLocation();
}, []);
GoogleMap
์์์ center = ์ง๋์ ๋ณด์ฌ์ง๋ ๊ฐ์ด๋ฐ ์ง์ GoogleMap
์์์ zoom = ์ด๊ธฐ ๊ตฌ๊ธ๋งต ํ๋ฉด์ ํ๋ ์ ๋MarkerF
์์์ position = ๋ง์ปค๊ฐ ์ฐํ ์ง์ ...
<GoogleMap
...
center={center}
zoom={16}
...
>
<MarkerF position={markerPosition} /> ๐!
</GoogleMap>
...
-์ถ๊ฐ์์
<Marker/>
๋์ <MarkerF/>
๋ฅผ ์ฌ์ฉ