๊ฐœ๋ฐœ๊ธฐ/Front

[Leaflet(๋ฆฌํ”Œ๋ฆฟ)] ์‚ฌ์šฉ๋ฐฉ๋ฒ• ์ตํžˆ๊ธฐ ๋ฉ”๋ชจ

๋™ ๋”” 2025. 2. 7. 00:04

Leaflet(๋ฆฌํ”Œ๋ฆฟ)

๋ฆฌํ”Œ๋ฆฟ์€ ์›น ๋งคํ•‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 2011๋…„ ์ฒ˜์Œ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, HTML5์™€ CSS3๋ฅผ ์ง€์›ํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐ์Šคํฌํ†ฑ ํ”Œ๋žซํผ์„ ์ง€์›ํ•œ๋‹ค. 

 

๊ฐœ๋ฐœ ๋„์ž… ์ „ ๋ฆฌํ”Œ๋ฆฟ์„ ์ตํžˆ๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธํ–ˆ๋˜ ๊ฒƒ๋“ค ๋ฉ”๋ชจ


ํ•จ๊ป˜ ๋ณธ ๋งํฌ๋“ค

 


  • ๊ธฐ๋ณธ ์œ„์น˜์žก๊ธฐ
var latlng = L.latLng(37.54165, 126.97166);
var map = L.map('map').setView([37.54233, 126.97244], 18);

 

์œ„์น˜ [37.54233, 126.97244]

์คŒ 18๋กœ ์„ค์ •

 

 


  • ๋ ˆ์ด์–ด ๋งํ’์„  ๋„์šฐ๊ธฐ
//๋ ˆ์ด์–ด
var layerCont = "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ<br>๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ<br>๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ<br>๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ<br>๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ";

var marker = L.marker([37.54165, 126.97166], {alt: '๋‚จ์˜์—ญ'}).addTo(map)
	.bindPopup(layerCont);

 

 


  • ๋งˆ์ปค ์ ์ฐ๊ธฐ
// ๋งˆ์ปค 1
var myIcon = L.divIcon({className: 'my-div-icon'}); // you can set .my-div-icon styles in CSS
L.marker([37.54339,126.97220], {icon: myIcon}).addTo(map);
.my-div-icon{
    width: 50px; height: 50px;
    background-color: red;
    border-radius: 50%;
}

 

 


  • ๋งˆ์ปค ์ด๋ฏธ์ง€ + ๋ ˆ์ด์–ด ๋งํ’์„  ๋„์šฐ๊ธฐ
// ๋งˆ์ปค 2 + ๋ ˆ์ด์–ด
var myIcon = L.icon({
	iconUrl: '/resources/images/icon/my-icon.png',
	iconSize: [30, 30],
	iconAnchor: [20, 20],
	popupAnchor: [0, -10],
	crossOrigin: false
});

// L.marker([37.54257,126.97091], {icon: myIcon}).addTo(map);

var layerCont = "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";

var marker = L.marker([37.54257,126.97091], {icon: myIcon}, {alt: '์น˜์•ˆ์„ผํ„ฐ'}).addTo(map)
	.bindPopup(layerCont);

 

์•„์ด์ฝ˜ ์‚ฌ์ด์ฆˆ : iconSize์†์„ฑ์œผ๋กœ ์„ค์ •

๋ ˆ์ด์–ด ๋œจ๋Š” ์œ„์น˜ : popupAnchor [์ขŒ์šฐ, ์ƒํ•˜] (๋งˆ์ด๋„ˆ์Šค ๋ถ™์€ ์ˆ˜๊ฐ€ ์œ— ๋ฐฉํ–ฅ)

 

 


  • ๋ ˆ์ด์–ด ํด๋ฆญ ์ด๋ฒคํŠธ alert ์ถœ๋ ฅ
var layerCont = "<div class='red'>๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br>";
layerCont += "<button type='button' onclick='test()'>ํด๋ฆญ</button>";
layerCont += "๋ ˆ์ด์–ด ๋ ์šฐ๊ธฐ22222222222<br></div>";

var marker = L.marker([37.54257,126.97091], {icon: myIcon}, {alt: '์น˜์•ˆ์„ผํ„ฐ'}).addTo(map)
    .bindPopup(layerCont);
}

function test(){
    alert("ํด๋ฆญํ–ˆ๋‹ค");
}

 

 

 


  • ์•„์ด์ฝ˜ ๋ฐ‘์— ๋ฌธ๊ตฌ๋ฐ•์Šค ๋งŒ๋“ค๊ธฐ
// ๋งˆ์ปค ๋ฐ‘์— ์ด๋ฆ„๋ถ™์ด๊ธฐ - ๋ฏผ์ฃผ์ธ๊ถŒ๊ธฐ๋…๊ด€
var customIcon01 = L.divIcon({
    html: '<div>์—ฌ๊ธฐ์•„์ด์ฝ˜?</div><div class="icon-label">์ดˆ์†Œ1-1</div>',
    className: 'my-div-icon',
    iconSize: [40, 40],
    iconAnchor: [20, 20],
    crossOrigin: false
});

L.marker([37.54033,126.97218], {icon: customIcon01}).addTo(map);
.icon-label{display: inline-block; background-color: #fff; color: red; width: max-content;}
.my-div-icon{background-color: red;}
.my-div-icon .icon-label{
   /* transform: translate(-35%, 30%); */
}

 

 


  • ๋ฌธ๊ตฌ๋ฐ•์Šค ๋””์ž์ธ ๋ณ€๊ฒฝ
.my-div-icon-02{
    position: relative; background:pink url(/resources/images/icon/select-arrow.png);
}
.my-div-icon > div{
    position: absolute;
    top: 0;
}
.icon-label{
    display: inline-block; background-color: #fff; color: red; width: max-content;
    position: absolute;
    bottom: -20px;
    left: 50%;
    transform: translate(-50%);
}

 

 

color: black;
text-shadow: 1px 0 #fff, 0 1px #fff, -1px 0 #fff, 0 -1px #fff;

 

 

color: #fff;
text-shadow: 1px 0 #000, 0 1px #000, -1px 0 #000, 0 -1px #000;