Leaflet: GeoJson pointerEvents = '์—†์Œ' ํšจ๊ณผ

์— ๋งŒ๋“  2017๋…„ 02์›” 03์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Leaflet/Leaflet

  • [X] ๋„์›€์„ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ๋ฒ„๊ทธ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  • [X] ๋™์ž‘์ด ๋ฌธ์„œํ™”๋˜๊ณ  ์˜ˆ์ƒ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
  • [X] ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‚ด ์ฝ”๋“œ๋‚˜ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ(Cordova, Ionic, Angular, Reactโ€ฆ)์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ „๋‹จ์ง€ ์ฝ”๋“œ ๋ฌธ์ œ๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • [X] ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์•„์ง ๋ณด๊ณ ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒˆ์‹ ๋ฐฉ๋ฒ•

  • ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ „๋‹จ์ง€ ๋ฒ„์ „: 1.0.3
  • ์‚ฌ์šฉ ์ค‘์ธ ๋ธŒ๋ผ์šฐ์ €(๋ฒ„์ „ ํฌํ•จ): Chrome 55
  • ์‚ฌ์šฉ ์ค‘์ธ OS/ํ”Œ๋žซํผ(๋ฒ„์ „ ํฌํ•จ): Windows

๋‚ด๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ํ–‰๋™๊ณผ ๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ํ–‰๋™

๋‘ ๊ฐœ์˜ GeoJson ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ณ (ํด๋ฆญ, ๋งˆ์šฐ์Šค ์˜ค๋ฒ„) ๋‘ ๋ฒˆ์งธ๋Š” ์‹œ๊ฐ์  ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ƒํ˜ธ ์ž‘์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ ๋ ˆ์ด์–ด๋Š” ๋‘ ๋ฒˆ์งธ ๋ ˆ์ด์–ด ์•„๋ž˜์— ์žˆ์œผ๋ฉฐ ํš๋งŒ ๊ทธ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ ˆ์ด์–ด ์Šคํƒ€์ผ์— ๋Œ€ํ•ด "pointerEvents"๋ฅผ ์—†์Œ์œผ๋กœ ์ง€์ •ํ–ˆ์ง€๋งŒ LeafLet์€ ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ svg์—๋Š” ์ด ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์˜ˆ

  • [X] ์ด ์˜ˆ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • [ ] ์ด ์˜ˆ์ œ๋Š” ํƒ€์‚ฌ ์ฝ”๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
var interactiveLayer = L.topoJson(epci2014TopoJson, {
        style: function (feature) {
            return {
                weight: 0.0,
                fillOpacity: 0.7,
                color: 'rgb(200,200,200)',
                fillColor: getColor(feature.properties.siren_epci || feature.properties.SIREN_EPCI)
            }
        },
        onEachFeature: function (feature, layer) {
            layer.on({
                mouseover: highlightFeature,
                mouseout: resetHighlight,
                click: zoomToFeature
            });

        }
    }).addTo(map);

    var justForDrawLayer=L.geoJson(departementsGeoJson, {
        style: function (feature) {
            return {
                pointerEvents : 'none',
                clickable:false,
                weight: 3,
                fillOpacity: 0.0,
                color: 'rgb(220,220,220)'
            }
        }
    }).addTo(map);

"ํด๋ฆญ ๊ฐ€๋Šฅ"์„ "๊ฑฐ์ง“"์œผ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์˜์–ด๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

http://playground-leaflet.rhcloud.com/ ๋˜๋Š” ์‚ฌ์ดํŠธ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ jsfiddle ์‚ฌ์šฉ.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

"in teractive:false "๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
(์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์š”์ฒญํ•ด์„œ) ๋ฏธ์•ˆํ•˜๊ณ  (์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ๊ธฐ์˜๋‹ค.

๊ณ ๋งˆ์›Œ.

๋ชจ๋“  4 ๋Œ“๊ธ€

๋‘ ๋ฒˆ์งธ ๋ ˆ์ด์–ด ์Šคํƒ€์ผ์— ๋Œ€ํ•ด "pointerEvents"๋ฅผ ์—†์Œ์œผ๋กœ ์ง€์ •ํ–ˆ์ง€๋งŒ LeafLet์€ ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

pointerEvents L.Path ์— ๋Œ€ํ•ด ์ธ์‹๋˜๋Š” ์˜ต์…˜์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•˜์…จ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

"ํด๋ฆญ ๊ฐ€๋Šฅ"์„ "๊ฑฐ์ง“"์œผ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์˜ต์…˜์€ 1.0.0์—์„œ ์ด๋ฆ„์„ interactive ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์„œ์˜ "๋Œ€ํ™”ํ˜• ๊ณ„์ธต์—์„œ ์ƒ์†๋œ ์˜ต์…˜"์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

"pointerEvents"์˜ ๊ฒฝ์šฐ: ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด ๋ ˆ์ด์–ด๋ฅผ "๋น„ํ™œ์„ฑ"์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์ œ๊ณต๋œ ์˜ˆ๋ฅผ ๋”ฐ๋ฅด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. http://leafletjs.com/examples/map-panes/ ์ฐฝ ๋ฐ geoJson ๋ ˆ์ด์–ด์— ์ ์šฉ๋œ pointerEvents. ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ์ด ๊ฐœ๋…์„ ์ž˜๋ชป ์ดํ•ดํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” geojson ์Šคํƒ€์ผ์— ๋Œ€ํ•œ inactive ์†์„ฑ์œผ๋กœ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋ชฉํ‘œ๋Š” ์ผ๋ถ€ ์ž‘์€ ๊ตญ๊ฐ€(๋‹ค๊ฐํ˜•)๋ฅผ cloropleth ์ง€๋„๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ ˆ์ด์–ด ์•„๋ž˜์—๋Š” ํƒ€์ผ ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๊ณ , ๋งจ ์œ„์—๋Š” ๋” ํฐ ๊ตญ๊ฐ€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ geojson ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์€ ์ž‘์€ ๊ตญ๊ฐ€๋ฅผ ์œ„ํ•œ "์ปจํ…Œ์ด๋„ˆ"์ž…๋‹ˆ๋‹ค. ์ด ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ๋‚ด๋ถ€์— ๋Œ€ํ•œ ์ „์ฒด ํˆฌ๋ช…๋„์™€ ํ•จ๊ป˜ ๋‹ค๊ฐํ˜• ํš๋งŒ ํ‘œ์‹œํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. "์ž‘์€ ๊ตญ๊ฐ€" ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š๊ณ  "ํฐ ๊ตญ๊ฐ€" ๋ ˆ์ด์–ด์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ

"in teractive:false "๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
(์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์š”์ฒญํ•ด์„œ) ๋ฏธ์•ˆํ•˜๊ณ  (์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ๊ธฐ์˜๋‹ค.

๊ณ ๋งˆ์›Œ.

๋‘ ๊ฐœ์˜ ๋ ˆ์ด์–ด๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋™์ผํ•œ ์ž‘์—…์ด ์žˆ์œผ๋ฉฐ ๋งจ ์œ„ ๋ ˆ์ด์–ด๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "in Interactive:false " ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰