์ ๋จ์ง ๋ง์ปค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ก๋๋์ด์ผ ํฉ๋๋ค. ๋์ ๋ค์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค.
GET http://localhost :8080/bower_components/leaflet/dist/imagesmarker-icon-2x.png 404(์ฐพ์ ์ ์์)
ํ์ง๋ง ํด๋น URL์ "์ด๋ฏธ์ง"์ "marker-icon-2x.png" ์ฌ์ด์ ์ฌ๋์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๊ฒ์ ๋๋ค.
์ฌ๋์๋ก ํ์์ ์ง์ ํด์ผ ํฉ๋๋ค. Leaflet ์์ค๋ก ์ด๋ํ์ฌ IconDefault ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด(Line 6976...):
iconUrl: '/marker-icon.png',
iconRetinaUrl: '/marker-icon-2x.png',
shadowUrl: '/marker-shadow.png',
๊ทธ๋ฌ๋ฉด ์์๋๋ก ์๋ํฉ๋๋ค.
0.7.7๋ก ๋๋๋ฆฌ๋ฉด ์ด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ์ด ๋ฌธ์ ์ ์์ธ์ ๋ฌด์์ ๋๊น?
์ฌ์ค, ๋ ๋์ ์์ ์ ๊ฒฝ๋ก์ ๋ง์ง๋ง ์ฌ๋์๊ฐ ํฌํจ๋๋๋ก L.Icon.Default.imagePath๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ์ด ์์ ์์ ๋๋ ์ ์ด๋ ๊ฒ ๋ณด์ด๋ ๊ฒ์ด ๋ณํ๋์ง ๊ถ๊ธํ ๊ฒ์ ๋๋ค.
์๋ง๋ ์ด๊ฒ์ ๋ด๊ฐ ๋ฐฉ๊ธ ๊ฒช์ ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ง์ปค๊ฐ ๋ก๋๋์ง ์์ต๋๋ค(๊ธฐ๋ณธ 64๋ก ๋ก๋ํ๋ ค๊ณ ํจ).
@types/leaflet
๋ฅผ ์ฌ์ฉํ์ฌ Angular CLI๋ก ํ๋ก์ ํธ๋ฅผ ์ค์ ํ์ต๋๋ค.๋๋ฅผ ์ํด Leaflet ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ด์ฝ์ Base 64๋ก ๋ก๋ํฉ๋๋ค.
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB[CUT_FOR_BREVITY]ASUVORK5CYII=")marker-icon.png" class="leaflet-marker-icon leaflet-zoom-animated leaflet-interactive" tabindex="0" style="margin-left: -12px; margin-top: -41px; width: 25px; height: 41px; transform: translate3d(225px, 197px, 0px); z-index: 197; outline: none;">
src
ํ๋ ๋์ ")marker-icon.png
๊ฐ ํฌํจ๋์ด ์์ด ์ด๋ฏธ์ง๊ฐ ์๋ชป๋ base64๋ก ๋ก๋๋์ง ์์ต๋๋ค. Chrome ๊ด๋ฆฌ์์์ ์ ๊ฑฐํ๋ฉด ์์ด์ฝ์ด ์ ์์ ์ผ๋ก ๋ํ๋ฉ๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋น์ ์ด ์ค๋ช ํ๋ ๋ฌธ์ ๊ฐ #4968๊ณผ ๋์ผํ๋ค๊ณ ํ์ ํ๋ฏ๋ก ์ด๊ฒ์ ์ค๋ณต์ผ๋ก ๋ซ์ต๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ง์ํด ์ฃผ์๋ฉด ์ฌ์คํ์ ๊ณ ๋ คํ๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ง๋ ์ด๊ฒ์ ๋ด๊ฐ ๋ฐฉ๊ธ ๊ฒช์ ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ง์ปค๊ฐ ๋ก๋๋์ง ์์ต๋๋ค(๊ธฐ๋ณธ 64๋ก ๋ก๋ํ๋ ค๊ณ ํจ).
๋ฒ์ ๋ฐฉ๋ฒ
@types/leaflet
๋ฅผ ์ฌ์ฉํ์ฌ Angular CLI๋ก ํ๋ก์ ํธ๋ฅผ ์ค์ ํ์ต๋๋ค.๋ด๊ฐ ๊ธฐ๋ํ๋ ํ๋๊ณผ ๋ด๊ฐ ๋ณด๊ณ ์๋ ํ๋
๋๋ฅผ ์ํด Leaflet ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ด์ฝ์ Base 64๋ก ๋ก๋ํฉ๋๋ค.
src
ํ๋ ๋์")marker-icon.png
๊ฐ ํฌํจ๋์ด ์์ด ์ด๋ฏธ์ง๊ฐ ์๋ชป๋ base64๋ก ๋ก๋๋์ง ์์ต๋๋ค. Chrome ๊ด๋ฆฌ์์์ ์ ๊ฑฐํ๋ฉด ์์ด์ฝ์ด ์ ์์ ์ผ๋ก ๋ํ๋ฉ๋๋ค.