์ ๋ ์ต๊ทผ ์ง๋ ์์ ์บ๋ฒ์ค์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค.
์ด ๊ณผ์ ์์ ๊ฐ์ฅ ํฐ ๊ณ ๋ฏผ์ ์ค์ธ/์ค์์๊ณผ ์ด๋(ํฌ)์ ํ์ ๋, ์ง๋์ ์บ๋ฒ์ค๊ฐ ํจ๊ป ์์ง์ด๋ฉฐ, ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ด ์ขํ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ง๋๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค.
๊ณ ๋ฏผ ๋์ ์ค๊ณ๋ฅผ ๊ตฌ์ฒดํํ๊ณ , ์ด๋ฅผ ๊ตฌํํ์๋๋ฐ, ์ด๋ฒ ํฌ์คํ ์์๋ ์ฒ์ ์ค๊ณ์ ๊ณ ๋ฏผํ๋ ํ๊ณ, ์ค๊ณ ๋ณ๊ฒฝ ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ๊ตฌํํ ๋ฐฉ๋ฒ์ ์ค์ฌ์ผ๋ก ์๊ฐํด๋ณด๋ ค ํฉ๋๋ค.
์ฌ์ค, ์ด ์ง๋-์บ๋ฒ์ค ์ฐ๋ ๊ณผ์ ์ ํ๋ก์ ํธ์์ ์ ๊ฐ ๋งก์๋ ๋ถ๋ถ์ด ์๋์๋๋ฐ ํ์ ๋ถ๊ป์ 2์ฃผ ๋์ ๊ตฌํํ์ง ๋ชปํ์ ์ ๋จธ๋ฆฌ๋ฅผ ์ธ๋งค์๋ ๊ฒ์ ๋ณด๊ณ โฆโฆ
๊ทธ๋ ๊ฒ ์ด๋ ค์ด์ง ์ ๋ ์น๋ถ์์ด ์๊ฒจ์ ์ฃผ๋ง์ ์ ๊น ์๋ํด๋ณด์๋ค๊ฐ ํด๊ฒฐํด๋ฒ๋ฆฐ ํ์คํฌ์๋๋ฐ์โฆโฆ..
์ ํฌ ํ๋ก์ ํธ์ ํต์ฌ ๊ธฐ๋ฅ์ด๊ธฐ๋ ํ๊ณ , ์ฒซ ์ฃผ์ฐจ ๋๋ถํฐ ์ค์ ๋ก ๊ตฌํ์ด ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ๋ถ๋ถ์ด์๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง๋ฅผ ์์ฑํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ ํฌ์คํ ํ๊ฒ ๋์์ต๋๋ค.
๋จผ์ ๊ตฌํ ๋ชฉํ๋ ๊ฐ๋จํ์ง๋ง ๋์ ์ ์ด์์ต๋๋ค.
๊ตฌํ์ ์์ํ๋ฉฐ ์๋์ ๊ฐ์ ์ง๋ฌธ์ ๋์ก์ต๋๋ค:
์ฒ์์๋ ์บ๋ฒ์ค์์ ๋ฐ์ํ ์ด๋ฒคํธ(๋ง์ฐ์ค ํด๋ฆญ, ๋๋๊ทธ ๋ฑ)๋ฅผ ์๋ ์ง๋์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณํ์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์บ๋ฒ์ค๋ฅผ ๋ํ๋ฏผ๊ตญ ์ง๋ ํฌ๊ธฐ๋งํผ ๊ณ ์ ํ๋ ์ค๊ณ๋ฅผ ์๋ํ์ต๋๋ค.
๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ด๋ ค์:
๋ํ๋ฏผ๊ตญ ํฌ๊ธฐ ์ ์ฒด์ ํด๋นํ๋ ์บ๋ฒ์ค์ ๊ทธ๋ฆผ ๋ฐ์ดํฐ์ ์ขํ๋ฅผ ๋ชจ๋ ์ ์ฅํ๋ ค๋, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ก์ต๋๋ค.
ํนํ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ฌ ๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ปธ์ต๋๋ค.
์บ๋ฒ์ค๊ฐ ๋๋ฌดํฌ๊ธฐ์ ์ด๋ฏธ์ง๊ฐ ๊นจ์ง ๊ฐ๋ฅ์ฑ O:
์บ๋ฒ์ค์ ํ์๋๋ ์ด๋ฏธ์ง๋ ์์๋ค์ด ๊นจ์ง ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๋จ์ด๋จ๋ฆด ๊ฐ๋ฅ์ฑ์ด ์์์ต๋๋ค.
pointer-event
์์ฑ ๋๊ธฐpointer-events - CSS: Cascading Style Sheets | MDN
pointer-event
๋ผ๊ณ ํจ์ CSS์ ์์ฑ ์ค ํ๋๋ก, ์์๊ฐ ๋ง์ฐ์ค ํด๋ฆญ, ํฐ์น, ์ปค์ ์ด๋๊ณผ ๊ฐ์ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ ์์ฑ์
๋๋ค.
์ ํฌ๋ tailwindcss
๋ฅผ ์ฌ์ฉํ๊ณ ์์๊ธฐ์, ๋ค์๊ณผ ๊ฐ์ด pointer-event-none
ํด๋์ค๋ฅผ ์ฃผ๋ ๊ฒ๋ง์ผ๋ก๋ ์ด ์ต์
์ ๋ ์ ์์์ต๋๋ค.
<div class='container relative w-[300px] h-[300px]'>
<div class='top-child absolute z-30 w-full h-full pointer-event-none' />
<div class='bottom-child absolute z-0 w-full h-full' />
</div>
์ด๋ ๊ฒ ํ๋ฉด top-child
์ ๋ชจ๋ ํฌ์ธํฐ ์ด๋ฒคํธ๋ฅผ ๋ ์ ์๋ ๊ฒ์ธ๋ฐ,
๊ฒฐ๋ก ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ์ง ์๊ณ ํด๋ฆญ ๋ฑ์ ์ด๋ฒคํธ๊ฐ bottom-child
๋ก ์ ๋ฌ์ด ๋ฉ๋๋ค.
์ ์ฌ์ง์ฒ๋ผ ์บ๋ฒ์ค์์ pointer-event
์์ฑ์ ๊บผ์ฃผ๋, ์ง๋๋ก ๋ฐ๋ก event๊ฐ ๋์ด๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์๊ณ , ์ด๋ ๊ฒ ์ง๋์ ๋จผ์ ์ด๋ฒคํธ๋ฅผ ์ฃผ๊ณ ์บ๋ฒ์ค์ ์ด๋ฒคํธ๋ฅผ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์๋ ๊ณ ๋ คํด๋ณด์์ต๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ๋๋ฉด ์ด๋ฒคํธ๋ฅผ ์ง๋๋ก ๋๊ฒผ๋ค๊ฐ, ์ง๋์์ ์บ๋ฒ์ค๋ก ์๋ก ๋ณด๋ด์ฃผ๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ํธ๋ค๋ง์ด ํจ์ฌ ๋ณต์กํ๊ณ ์ฑ๋ฅ์ ์ผ๋ก ์ข์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ๋จํ์๊ณ ,
๊ฒฐ๊ตญ ์๋์ ๊ฐ์ด ๊ตฌํํ์์ต๋๋ค.
๊ณ ๋ฏผ ๋์, ์บ๋ฒ์ค๋ฅผ ๊ณ ์ ํ์ง ์๊ณ ์ด๋ ๋ฐ ์ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์บ๋ฒ์ค๋ฅผ ๋ค์ ๊ทธ๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ต๋๋ค.
์ค๊ณ ๋จ๊ณ | ๋ฐฉ๋ฒ | ์ฅ์ | ํ๊ณ์ |
---|---|---|---|
1์ฐจ | ์บ๋ฒ์ค ์ด๋ฒคํธ โ ์ง๋ ์ด๋ฒคํธ ์ ๋ฌ | ๊ฐ๋จํ ๊ตฌํ, ๊ธฐ์กด ์ง๋ ๋ก์ง ์ฌ์ฌ์ฉ | ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋๋ ์ด, UX ์ ํ |
2์ฐจ | ์บ๋ฒ์ค ๊ณ ์ & ์ง๋ ์ด๋/์ค ์ ํ | ๋๊ธฐํ ๋ถํ์, ๊ตฌํ ๊ฐ๋จ | ๋ฐ์ดํฐ ๊ด๋ฆฌ ์ด๋ ค์, ์ ์ฐ์ฑ ๋ถ์กฑ |
3์ฐจ | ์ด๋ฒคํธ โ ์ง๋ ์ด๋ฒคํธ โ ์บ๋ฒ์ค ์ด๋ฒคํธ | ์ง๋๋ฅผ ํฐ์นํ๋ ๋์๊ณผ ๋์ผ, ์ง๋ api์์ ์ ๊ณตํ๋ ์ด๋ฒคํธ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ | ์ด๋ฒคํธ ํธ๋ค๋ง์์ ์ฑ๋ฅ ์ ํ, ๋ก์ง ๋ณต์ก |
์ต์ข | ์ด๋๋ง๋ค ์บ๋ฒ์ค ์ฌ๋ ๋๋ง | ๋ฐ์ดํฐ ๊ด๋ฆฌ ํจ์จ์ , ์ฑ๋ฅ ์ ์ฐ | ์ฝ๊ฐ์ ๋ ๋๋ง ๋น์ฉ ๋ฐ์ |
๊ฒฐ๊ตญ ์์์ ๊ฒฐ์ ํ ๋๋ก ์ด๋ํ ๋๋ง๋ค ์บ๋ฒ์ค๋ฅผ ์ฌ๋ ๋๋งํ๋ ๋ฐฉ์์ผ๋ก ์๊ฐํ๊ณ , ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ๋์์ํฌ์ง์ ๋ํด ๊ณ ๋ฏผํด๋ณด์์ต๋๋ค.
์ง๋๋ฅผ ๋ ๋๋งํ๋ ์ญํ ์ ์ง๋ API(์: ๋ค์ด๋ฒ ์ง๋)๊ฐ ๋งก๊ณ , ์บ๋ฒ์ค๋ HTML <canvas>
์๋ฆฌ๋จผํธ๋ก ๊ตฌํํ์ต๋๋ค. ์ง๋์ ์บ๋ฒ์ค๋ ๋์ผํ DOM ํธ๋ฆฌ ์์ ์์ง๋ง, ์บ๋ฒ์ค๋ ํฌ๋ช
ํ ์ค๋ฒ๋ ์ด์ฒ๋ผ ๋์ํ๋๋ก ์ค์ ํ์ต๋๋ค.
<div id="map-container">
<div id="map"></div> <!-- ์ง๋ -->
<canvas id="canvas"></canvas> <!-- ์บ๋ฒ์ค -->
</div>
#map
์ ์ง๋ API๋ก ์ด๊ธฐํ.#canvas-overlay
๋ absolute
๋ก ์ง๋ ์๋ฅผ ๋ฎ์ด ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋๋ก ๊ตฌ์ฑ.์ค์ด๋ ์ด๋ ์, ์ง๋์ ์บ๋ฒ์ค์ ์์น ๋ฐ ํฌ๊ธฐ๋ฅผ ๋๊ธฐํํ๋ ๊ฒ์ด ํต์ฌ์ด์์ต๋๋ค. ์ด๋ฅผ ์ํด ๋ค์์ ๊ณ ๋ คํ์ต๋๋ค:
์ค ๋๊ธฐํ
์ง๋์ ์ค ๋ ๋ฒจ์ด ๋ณ๊ฒฝ๋๋ฉด, ๊ทธ๋ฆผ์ ํฌ๊ธฐ์ ์์น๋ ๋์ผํ๊ฒ ๋ณํด์ผ ํฉ๋๋ค.
zoom_changed
์ด๋ฒคํธ๋ฅผ ํ์ฉํด ํ์ฌ ์ค ๋ ๋ฒจ์ ๊ฐ์งํ์ต๋๋ค.์ด๋ ๋๊ธฐํ
์ง๋๊ฐ ์ด๋ํ ๋ ์บ๋ฒ์ค์ ๊ทธ๋ฆผ๋ ํจ๊ป ์ด๋ํด์ผ ํ์ต๋๋ค.
center_changed
์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํด ์ง๋ ์ค์ฌ ์ขํ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , ๊ทธ์ ๋ฐ๋ผ ์บ๋ฒ์ค๋ฅผ ๋ค์ ๋ ๋๋งํ์ต๋๋ค.๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋ ์ฌ์ฉ์๋ ํฝ์ ์ขํ๋ก ์์ ํ์ง๋ง, ์ด ์ขํ๋ฅผ ์ง๋ ์ขํ(LatLng)๋ก ๋ณํํ์ฌ ์ ์ฅํด์ผ ์ด๋๊ณผ ์ค์๋ ์์น๊ฐ ์ ์ง๋ฉ๋๋ค.
์ด๋ฅผ ์ํด ๋ค์ ๋จ๊ณ๋ฅผ ์ค๊ณํ์ต๋๋ค:
canvasPointToLatLng()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์บ๋ฒ์ค ํฝ์
์ขํ๋ฅผ ์ง๋ ์ขํ๋ก ๋ณํํ์ต๋๋ค.latLngToCanvasPoint()
๋ฉ์๋๋ฅผ ํตํด ์ ์ฅ๋ ์ขํ๋ฅผ ๋ค์ ์บ๋ฒ์ค์ ํฝ์
์ขํ๋ก ๋ณํํ์ฌ ์ฌ๋ฐ๋ฅธ ์์น์ ๊ทธ๋ฆผ์ ๋ ๋๋งํ์ต๋๋ค.์ง๋ ์ด๋/์ค ์, ์บ๋ฒ์ค๋ฅผ ๋ค์ ๋ ๋๋งํ ๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด:
์ฒ์์๋ ์คํฌ๋กค๊ณผ ๋๋๊ทธ๋ก ์ค/์ด๋์ ๊ตฌํํ๊ธฐ ์ ์, ์บ๋ฒ์ค์ ์ ์ ์ฐ์ผ๋ฉด ์ง๋์ ์ขํ ๊ทธ๋๋ก ์ฐ๋์ด ๋๋์ง ํ์ธ์ด ํ์ํ์ต๋๋ค.
๊ทธ๋์ ์ง์ ์ ์ธ ์ค/์ด๋ ๋์ ๋ฒํผ์ ์ด์ฉํ ํ ์คํธ ๋ฐฉ์์ ์ค๊ณํ์ต๋๋ค.
redrawCanvas
๋ฅผ ํธ์ถํฉ๋๋ค.์ค ๊ธฐ๋ฅ๊ณผ ์ง๋ ์ด๋ ํ ์คํธ๋ฅผ ์ํด ์์ฑํ ๋ฒํผ ํธ๋ค๋ฌ:
const handleZoomChange = (zoomChange: number) => {
if (!map) return;
const currentZoom = map.getZoom();
map.setZoom(currentZoom + zoomChange);
redrawCanvas(); // ์บ๋ฒ์ค๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ
};
const handleMapPan = (direction: 'up' | 'down' | 'left' | 'right') => {
if (!map) return;
const moveAmount = 100; // ์ง๋ ์ด๋ ๊ฑฐ๋ฆฌ
let point: naver.maps.Point;
switch (direction) {
case 'up':
point = new naver.maps.Point(0, -moveAmount);
break;
case 'down':
point = new naver.maps.Point(0, moveAmount);
break;
case 'left':
point = new naver.maps.Point(-moveAmount, 0);
break;
case 'right':
point = new naver.maps.Point(moveAmount, 0);
break;
default:
return;
}
map.panBy(point); // ์ง๋ ์ด๋
redrawCanvas(); // ์บ๋ฒ์ค ๋ค์ ๊ทธ๋ฆฌ๊ธฐ
};
<button onClick={() => handleZoomChange(1)} className="rounded bg-green-500 p-2">
Zoom In
</button>
<button onClick={() => handleZoomChange(-1)} className="rounded bg-red-500 p-2">
Zoom Out
</button><button onClick={() => handleMapPan('up')} className="rounded bg-blue-500 p-2">
Up
</button><button onClick={() => handleMapPan('down')} className="rounded bg-blue-500 p-2">
Down
</button><button onClick={() => handleMapPan('left')} className="rounded bg-blue-500 p-2">
Left
</button><button onClick={() => handleMapPan('right')} className="rounded bg-blue-500 p-2">
Right
</button>
gif ์ฉ๋์ ์ค์ด๋๋ผ ์ด๋ฏธ์ง ์์์ด ๋จ๋ ์ ..... ์ํด ๋ฐ๋๋๋ค.......
(๋ง์ฝ ์ด๋ฏธ์ง๊ฐ ๋ฉ์ถฐ์๋ค๋ฉด, ์ด๋ฏธ์ง์์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค ํด๋ฆญ ํ ์ ํญ์์ ์ด๋ฏธ์ง ์ด๊ธฐ
๋ก ๋ค์ด๊ฐ์ฃผ์ธ์... ๋ฒจ๋ก๊ทธ๊ฐ gif๋ฅผ ์ง์ํ์ง ์๋๊ฐ๋ด์....)
ํ ์คํธ๋ฅผ ํตํด์ ์ฝ๊ฐ์ ๋ฌธ์ ๋ค์ ๋ฐ๊ฒฌํ๋๋ฐ, ์ด๋ ๊ธ๋ฐฉ ํด๊ฒฐํ๊ธฐ๋ ํ๊ณ ํฐ ๋ฌธ์ ๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ ์ธ๊ธ๋ง ํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํ ์คํธ๋ฅผ ํตํด ์บ๋ฒ์ค์ ์ง๋๊ฐ ํญ์ ๋๊ธฐํ๋๋ ๊ฒ์ด ์๋๋ ์ ์ ํ์ธํ์ต๋๋ค.
์บ๋ฒ์ค์ ์ฐ์ ์ ์ด ์ง๋๋ฅผ ์ด๋ํ๊ฑฐ๋ ์ค ์์ํ์ ๋, ์์ํ ์ขํ์ ๋จธ๋ฌด๋ฅด์ง ์๊ณ ์๋ฑํ ๊ณณ์ผ๋ก ์ด๋ํ์ต๋๋ค.
๋๋ฒ๊น ์ ํด๋ณด๋ ์ง๋ ์ขํ์ ์บ๋ฒ์ค ํฝ์ ์ขํ ๊ฐ ๋ณํ ๋ก์ง์ ์ค๋ฅ๊ฐ ์์์ต๋๋ค.
๊ทธ๋์
latLngToCanvasPoint
ํจ์๋ฅผ ์์ ํ์๊ณ ๊ฒฐ๋ก ์ ์ผ๋ก ๋์ด์ ๋ฌธ์ ๊ฐ ์์์ ๋ฐ๊ฒฌํ๊ณ , ์ดํ ๋ฒํผ์ด ์๋ ๋ง์ฐ์ค ํด๋ฆญ๊ณผ ํฐ์น ์ด๋ฒคํธ๋ก ์ค, ์ด๋์ ๋ค๋ฃฐ ์ ์๋๋ก ์์ ํด๋ณด์์ต๋๋ค.
๊ทธ ๊ณผ์ ์์๋ ๋ง์ ์ด๋ ค์์ด ์์๊ณ ํ๋์ ํฌ์คํ ์์ ๋ชจ๋ ์์ฑํ๊ธฐ์๋ ๋๋ฌด ๊ธธ์ด์ง ๊ฒ ๊ฐ์ ๋ค์ ํฌ์คํ ์์ ์์ฑํด๋์์ต๋๋ค. (๊ฐ์ฅ ์๋ โํธ๋ฌ๋ธ ์ํ โ ์ฐธ๊ณ )
์๋๋ ์ ๊ฐ ์์ฑํ ์ฃผ์ ์ฝ๋์ ๋๋ค.
// ์บ๋ฒ์ค ์ด๊ธฐํ
const canvas = document.getElementById('canvas-overlay') as HTMLCanvasElement;
const context = canvas.getContext('2d');
// ์ง๋ ์ด๋ฒคํธ์ ์บ๋ฒ์ค ๋๊ธฐํ
map.addListener('zoom_changed', () => renderCanvas());
map.addListener('center_changed', () => renderCanvas());
// ์ง๋ ์ขํ โ ์บ๋ฒ์ค ํฝ์
์ขํ
function latLngToCanvasPoint(latLng: google.maps.LatLng): { x: number; y: number } {
const projection = map.getProjection();
const point = projection.fromLatLngToPoint(latLng);
return { x: point.x * scale, y: point.y * scale };
}
// ์บ๋ฒ์ค ํฝ์
์ขํ โ ์ง๋ ์ขํ
function canvasPointToLatLng(pixel: { x: number; y: number }): google.maps.LatLng {
const projection = map.getProjection();
return projection.fromPointToLatLng(new google.maps.Point(pixel.x / scale, pixel.y / scale));
}
// ์บ๋ฒ์ค์ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
function renderCanvas() {
context.clearRect(0, 0, canvas.width, canvas.height);
// ๊ทธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ฉฐ ์ง๋ ์ขํ๋ฅผ ํฝ์
์ขํ๋ก ๋ณํ
drawings.forEach(drawing => {
const { x, y } = latLngToPixel(drawing.latLng);
context.beginPath();
context.arc(x, y, drawing.radius, 0, Math.PI * 2);
context.fillStyle = drawing.color;
context.fill();
});
}
๊ฒฐ๋ก ์ ์ผ๋ก ์ด๋ ๊ฒ ๊ตฌํํ์ฌ ์ง๋์ ์บ๋ฒ์ค๋ฅผ ์ฐ๋์ํฌ ์ ์์๊ณ , ์บ๋ฒ์ค๋ฅผ ์ด๋์ํค๊ฑฐ๋ ์ค์ธ/์ค์์ ํ์ ๋์๋ ์บ๋ฒ์ค์ ๊ทธ๋ ค์ ธ ์๋ ๊ทธ๋ฆผ๋ค์ด ๊ทธ ์๋ฆฌ์ ๊ทธ๋๋ก ์์นํ ์ฑ ๋ฌธ์ ์์ด ๋์ํ๋๋ก ๊ตฌํํด์ฃผ์์ต๋๋ค.
์ฌ์ค ์ด ๋ฌธ์ ๋ง๊ณ ๋ ์บ๋ฒ์ค์ ์ง๋๋ฅผ ์ฐ๋ํ๊ณ ์๋น์คํ๋ ๊ณผ์ ์์ ์ ๋ง ๋ง์ ์ํ์ฐฉ์ค๊ฐ ์์๋๋ฐ์..
๋ชจ๋ ํ๋ฒ์ ์์ฑํ๊ธฐ์ ์ด๋ ค์์ด ์์ด์, ๋๋์ด์ ๋ ์์ฑํด๋์์ต๋๋ค.
์ง๋์ ์บ๋ฒ์ค ์ฐ๋ ๊ณผ์ ์์ ์๊ธด ๋ด์ฉ๋ง ํด๋ ์ ๋ง ๋ง์์.....
์ง๋-์บ๋ฒ์ค ์ฐ๋ํ๋ฉด์ ๋ฐ์ํ ๋ฌธ์ ๋ค์ ๋ํ ๋ ๋ง์ ๋ด์ฉ์ ์๋ ๋งํฌ์์ ํ์ธํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!!
- ๐ฑ๏ธ ๋ง์ฐ์ค ์ด๋ฒคํธ ๊ตฌํ ๊ณผ์
- ๐ ์บ๋ฒ์ค ์์์ ์บ๋ฆญํฐ๋ฅผ ํ์ ์ํค๊ณ ๋ค์จ ํจ๊ณผ ์ ํ๊ธฐ