Leaflet: Webkit ๋ธŒ๋ผ์šฐ์ €์˜ ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€์—์„œ ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„

์— ๋งŒ๋“  2015๋…„ 06์›” 30์ผ  ยท  96์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Leaflet/Leaflet

screen shot 2015-06-30 at 14 39 12

์Šคํฌ๋ฆฐ ์ƒท์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํƒ€์ผ ์‚ฌ์ด์— ์ž‘์€ ๊ณต๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Safari, Chrome ๋ฐ Opera์˜ ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€์—์„œ ๋‚˜์—๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ # 2377์—์„œ ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ๋‚˜์ค‘์— ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด 3ccbe5b์—์„œ ์ œ๊ฑฐ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ Chrome์˜ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด ํ›จ์”ฌ ๋‚˜๋นด์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€์€ ์šฐ๋ฆฌ ์•ฑ์˜ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ์ด ๋ฒ„๊ทธ๊ฐ€ ๋‚จ์•„์žˆ๋Š” ํ•œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” jsFiddle์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค : http://jsfiddle.net/Eschon/pw9jcjus/1/

bug in progress

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

ํŠนํžˆ ์–ด๋‘์šด์ง€๋„ ๋‚˜ ์ด๋ฏธ์ง€ (์ œ ๊ฒฝ์šฐ์—๋Š”)์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๋‹นํžˆ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. Ivan์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ์•คํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ์œผ๋กœ ์ธํ•ด ํ™•๋Œ€ / ์ถ•์†Œ ์ค‘์— _fractional_ ๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„ ๋•Œ๊นŒ์ง€์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (๋˜๋Š” ํ•ดํ‚น)์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ผ์„ 1 ํ”ฝ์…€ ๋” ํฌ๊ฒŒ ๋งŒ๋“ค๊ณ  ๋ถ€์ž‘์šฉ์ด 1 ํ”ฝ์…€๋งŒํผ ๊ฒน์น˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ํƒ€์ผ์ด ์•ฝ๊ฐ„ ํ™•๋Œ€๋˜๊ณ  ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค (1px).

/* 
 * Workaround for 1px lines appearing in some browsers due to fractional transforms
 * and resulting anti-aliasing.
 * https://github.com/Leaflet/Leaflet/issues/3575
 */
(function(){
    var originalInitTile = L.GridLayer.prototype._initTile
    L.GridLayer.include({
        _initTile: function (tile) {
            originalInitTile.call(this, tile);

            var tileSize = this.getTileSize();

            tile.style.width = tileSize.x + 1 + 'px';
            tile.style.height = tileSize.y + 1 + 'px';
        }
    });
})()

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

๋ชฐ๋ผ. :( Safari์—์„œ๋งŒ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์ง€๋งŒ โ€” Chrome / Opera๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„์ด๋””์–ด๊ฐ€ ์žˆ์ง€๋งŒ "๊ธ‰์ง„์ "๊ณผ "์‹คํ—˜์ "์ด๋ผ๋Š” ๋‹จ์–ด์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/IvanSanchez/Leaflet.gl

์ œ๊ฐ€ ๋ฐœ๊ฒฌ ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ํ…์Šค์ฒ˜๋ฅผ ๊ณ ์ •ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰,์ด ์ค„์ด ์ œ๊ฑฐ ๋œ ๊ฒฝ์šฐ : https://github.com/IvanSanchez/Leaflet.gl/blob/master/src/core/GlUtil.js#L74 ์Šฌ๋ผ์ด ๋ฒ„ ( "ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ")๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค (ํ…์Šค์ฒ˜๊ฐ€ ์‚ผ๊ฐํ˜•๊ณผ ํƒ€์ผ์˜ ๋‹ค๋ฅธ๋ฉด์˜ ์ ˆ๋ฐ˜ ํ”ฝ์…€์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค). ๊ทธ๋ž˜์„œ, ๋‚ด ์ถ”์ธก์€ Webkit์ด ๊ฐ ์ด๋ฏธ์ง€์˜ ๊ฐ€์žฅ์ž๋ฆฌ์— ๋ฐ˜ ํ”ฝ์…€์„ ์•ˆํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ํƒ€์ผ ๋ ˆ์ด์–ด ์‚ผ๊ฐํ˜•์€ ์€์ƒ‰์—†์ด ๋ Œ๋”๋ง๋˜๋Š” ์™„์ „ํ•œ ๋ฉ”์‹œ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "์‹คํ—˜์ "์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๋‹น๋ถ„๊ฐ„ ๊ทธ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@mourner Safari์—์„œ๋Š” ๋” ๊ฐ•๋ ฅํ•œ ํšจ๊ณผ๊ฐ€ ์žˆ์ง€๋งŒ Chrome์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
screen shot 2015-06-30 at 15 42 07

@IvanSanchez ์™€์šฐ ์ข‹์€ ์ผ์ด์ง€๋งŒ (์•„์ง) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Eschon ์˜ˆ, Retina ํ™”๋ฉด์—์„œ๋Š” ๋ˆˆ์— ๋œ ๋„๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์ด๊ฒƒ์„ ๋ˆˆ์น˜ ์ฑ„์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” Firefox์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
jsFiddle์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ•ด๋‹น ์‚ฌ์ดํŠธ ๋ฅผ ๋ณด๋ฉด
Firefox 39์™€ 41.0a2์—์„œ ๊ฐ™์€ ๊ณต๊ฐ„์„ ์–ป์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ด๊ฒƒ์€ iframe์˜ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง€๋„๋ฅผ ์ง์ ‘ ์—ด๋ฉด ์žฌ์ƒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งŽ์€ ํ•ดํ‚น์—†์ด 1.0์—์„œ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•œ๋‹ค. ๋ฐฑ ๋กœ๊ทธ์˜ ๋งจ ์•„๋ž˜๋กœ ๋ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  Chrome์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. OpenStreet์ง€๋„๊ฐ€ ์ด๋Ÿฌํ•œ ์„ ์œผ๋กœ ์ž˜ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ์‚ฌ.

ํŠนํžˆ ์–ด๋‘์šด์ง€๋„ ๋‚˜ ์ด๋ฏธ์ง€ (์ œ ๊ฒฝ์šฐ์—๋Š”)์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๋‹นํžˆ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. Ivan์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ์•คํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ์œผ๋กœ ์ธํ•ด ํ™•๋Œ€ / ์ถ•์†Œ ์ค‘์— _fractional_ ๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„ ๋•Œ๊นŒ์ง€์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (๋˜๋Š” ํ•ดํ‚น)์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ผ์„ 1 ํ”ฝ์…€ ๋” ํฌ๊ฒŒ ๋งŒ๋“ค๊ณ  ๋ถ€์ž‘์šฉ์ด 1 ํ”ฝ์…€๋งŒํผ ๊ฒน์น˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ํƒ€์ผ์ด ์•ฝ๊ฐ„ ํ™•๋Œ€๋˜๊ณ  ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค (1px).

/* 
 * Workaround for 1px lines appearing in some browsers due to fractional transforms
 * and resulting anti-aliasing.
 * https://github.com/Leaflet/Leaflet/issues/3575
 */
(function(){
    var originalInitTile = L.GridLayer.prototype._initTile
    L.GridLayer.include({
        _initTile: function (tile) {
            originalInitTile.call(this, tile);

            var tileSize = this.getTileSize();

            tile.style.width = tileSize.x + 1 + 'px';
            tile.style.height = tileSize.y + 1 + 'px';
        }
    });
})()

@cmulders ํ•ด๊ฒฐํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ฃผ๋กœ ํฐ์ƒ‰๊ณผ ํŒŒ๋ž€์ƒ‰์˜ ์Šคํ‚ค ๋ฆฌ์กฐํŠธ์ง€๋„๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—. ์ง€๊ธˆ์€ ๊ณต๋ฐฑ์„ ๋ฌด์‹œํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ›จ์”ฌ ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

cartodb ์–ด๋‘์šด ํƒ€์ผ๋กœ jsbin์„ ๋งŒ๋“ค๋ฉด ๋ ˆํ‹ฐ ๋‚˜ ํ™”๋ฉด์—์„œ๋„ ์„ ์ด ๋ณด์ž…๋‹ˆ๋‹ค.
http://jsbin.com/ratoli/5/edit?html , js, output

Safari / Chrome ๋ฒ„๊ทธ, FF ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด Leaflet์—†๋Š” Chrome ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•˜๋ฏ€๋กœ ํ–ฅํ›„ Chrome ๋ฒ„์ „์—์„œ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

@hyperknot ์ด๋ฏธ Chrome ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ง€๊ธˆ์€ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ €๋Š” leafletjs 1.0 ๋ฒ ํƒ€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋•Œ๋•Œ๋กœ osx El Capitan์˜ (์ตœ์‹  : chrome, safari, firefox)์—์„œ์ด ๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ transform css ์†์„ฑ์„ 1px ์”ฉ ํŽธ์ง‘ํ•˜๋ฉด ํŽธ์ง‘ ๋œ ํƒ€์ผ์ด ์˜†์—์žˆ๋Š” ํƒ€์ผ๊ณผ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

// ex.
 transform: translate3d(1556px, -81px, 0px);
 // to
 transform: translate3d(1555px, -80px, 0px);

๋•Œ๋•Œ๋กœ์ด ๋ฒ„๊ทธ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (1px ์ฐจ์ด) !! ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํ˜„์žฌ์ง€๋„ ์ปจํ…Œ์ด๋„ˆ์˜ ์Šคํƒ€์ผ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ํƒ€์ผ์ด ๋ Œ๋”๋ง์‹œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ •๋ ฌ๋˜๊ณ  1px์˜ ์ฐจ์ด๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด์ง€๋„ ์ด๋™ ์ด๋ฒคํŠธ์— ๊ฐ„๊ฒฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋™์ž‘์€ ํƒ€์ผ ์ฃผ์œ„์— 1px ํ…Œ๋‘๋ฆฌ๊ฐ€ ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

OS X El Capitan์˜ Safari 9.1์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” CSS ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

.leaflet-tile-container img {
    box-shadow: 0 0 1px rgba(0, 0, 0, 0.05);
}

๋‚˜๋Š” ๋งŽ์€ ์‹ ์šฉ์„ ์–ป์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ _why_์— ํžŒํŠธ๋ฅผ์ฃผ๋Š” ๋‹ค์Œ Stackoverflow ๋‹ต๋ณ€์—์„œ ๊ฐ€์ ธ ์™”์Šต๋‹ˆ๋‹ค .

box-shadow๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€๋ณด๋‹ค ์ง์ ‘์ ์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ž์˜ ๋‹ค์‹œ ์น ํ•˜๊ธฐ ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ•˜์—ฌ WebKit์ด ์ถ”๊ฐ€ ํ”ฝ์…€์„ ๋‹ค์‹œ ์น ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ•์Šค ์„€๋„์šฐ์˜ ์•Œ๋ ค์ง„ ์„ฑ๋Šฅ ์˜ํ–ฅ์€ ์‚ฌ์šฉ๋˜๋Š” ๋ธ”๋Ÿฌ ๋ฐ˜๊ฒฝ๊ณผ ์ง์ ‘ ๊ด€๋ จ์ด ์žˆ์œผ๋ฏ€๋กœ 1 ํ”ฝ์…€ ์„€๋„์šฐ๋Š” ๊ฑฐ์˜ ์˜ํ–ฅ์„์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋จผ์ € ์‹œ๋„ํ•˜๋ฉด ์ข‹์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ ์ ˆํ•œ ์ˆ˜์ •์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@href ์•„๋งˆ๋„ ๊ทธ ์ˆ˜์ •์œผ๋กœ ํ’€ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

@href @IvanSanchez ์ด๊ฒƒ์ด ๋ Œ๋”๋ง ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ์•ŒํŒŒ ๋ถˆํˆฌ๋ช…๋„๊ฐ€์žˆ๋Š” ๋ฐ•์Šค ์„€๋„์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋ฐ”์ผ ์žฅ์น˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ”„๋กœํŒŒ์ผ ๋งํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„ฑ๋Šฅ์— ๊ฐ€์‹œ์  ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฑฐ๋‚˜ ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@IvanSanchez ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ Œ๋”๋ง ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ์•ŒํŒŒ ๋ถˆํˆฌ๋ช…๋„๊ฐ€์žˆ๋Š” ๋ฐ•์Šค ์„€๋„์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋ฐ”์ผ ์žฅ์น˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ”„๋กœํŒŒ์ผ ๋งํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„ฑ๋Šฅ์— ๊ฐ€์‹œ์  ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฑฐ๋‚˜ ํŒจ๋‹์„ ์œ„ํ•ด ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์˜ ํšจ๊ณผ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ „ํ˜€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Stackoverflow ๋‹ต๋ณ€์—์„œ ์ด๊ฒƒ์€ ํšจ๊ณผ๊ฐ€์—†๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ ‘์„  ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์˜๊ฒฌ์„ ์‹ ๋ขฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ง€์‹์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ์กฐ์‚ฌํ•˜๊ณ  ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ”„๋กœํŒŒ์ผ ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ™•์‹คํžˆ ์ข‹์€ ์ƒ๊ฐ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฃผ๋ณ€์„ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ์šด์ด ์ข‹์•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์•Œ๊ธฐ๋ฅผ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค.

@hyperknot @href ๋ช‡ ์ฃผ ์•ˆ์— ํ…Œ์ŠคํŠธ ๋ธŒ๋ผ์šฐ์ € ์„ธํŠธ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฒค์น˜ ๋งˆํฌ๋ฅผ ์ˆ˜ํ–‰ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@IvanSanchez @href ๋˜ํ•œ์ด ํ•ดํ‚น์„ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜ํ–ฅ์„๋ฐ›๋Š” ๋ธŒ๋ผ์šฐ์ €๋กœ๋งŒ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@IvanSanchez ๋Š” Leaflet ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ํ”„๋กœํŒŒ์ผ ๋งํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ์›Œํฌ ํ”Œ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ์ด ํ•ดํ‚น์„ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜ํ–ฅ์„๋ฐ›๋Š” ๋ธŒ๋ผ์šฐ์ €๋กœ๋งŒ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌํŒŒ๋ฆฌ์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌํŒŒ๋ฆฌ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Chrome์—์„œ ์ด๊ฒƒ์„ ๋ณธ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์›นํ‚ท ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฌ์ „ํžˆ์ด ๋ฒ„๊ทธ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

L.Map ์ƒ์„ฑ์ž ํ•ญ๋ชฉ์—์„œ ์„ ํƒํ•œ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•ด์„œ๋งŒ์ง€๋„์— CSS ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

@href ๋‚ด Chromium 49์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@hyperknot ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ฒƒ๋“ค์„ ํ”„๋กœํŒŒ์ผ ๋งํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„

@href ๋˜ํ•œ์ด ์ˆ˜์ •์€ ๋‚ด Chromium 49์˜ ํƒ€์ผ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค ... ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ํ๋ฆฌ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์›๋ณธ, .leaflet-container { background: black } :

fractional-space

img.leaflet-tile.leaflet-tile-loaded { box-shadow: 0 0 1px rgba(0, 0, 0, 0.05); } :

fractional-space1

: crying_cat_face :

์ด์ƒ ํ•˜๋„ค. Chromium 49 (OS X El Capitan)์—์„œ๋Š”์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฐ•์Šค ์„€๋„์šฐ๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ํ”Œ๋ ˆ์ด ๊ทธ๋ผ์šด๋“œ : http://playground-leaflet.rhcloud.com/yid/1/edit?html , output

Webkit ๋ฐ Blink ํŒ€์— Leaflet์—†๋Š” ๋ฒ„๊ทธ๋ฅผ ์ œ์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ Leaflet์—†๋Š” ์˜ˆ์ œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
http://playground-leaflet.rhcloud.com/say/1/edit?html , ์ถœ๋ ฅ

์ œ์ถœ ๋œ Chromium ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ : https://bugs.chromium.org/p/chromium/issues/detail?id=600120

์ œ์ถœ ๋œ Webkit ๋ฒ„๊ทธ : https://bugs.webkit.org/show_bug.cgi?id=156130

img-less ๋ฒ„์ „ : http://playground-leaflet.rhcloud.com/foqi/1/edit?html , output

[email protected]์˜ Chromium ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์˜ ์ผ๋ถ€ ์—…๋ฐ์ดํŠธ

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๋Ÿฌ๋ถ„๋“ค์—๊ฒŒ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ ๊ทน์ ์œผ๋กœ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์š”์†Œ์˜ ๋กœ์ปฌ ๊ณต๊ฐ„์—์„œ ์‚ฌ๋ฌผ์„ ๋ž˜์Šคํ„ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์š”์†Œ์— ๋ถ€๋ถ„ ๋ณ€ํ™˜์ด ์žˆ์œผ๋ฉด ๋ž˜์Šคํ„ฐ ํ™” ๋œ ํ…์Šค์ฒ˜๊ฐ€ ์„ ํ˜• ๋ฆฌ์ƒ˜ํ”Œ๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„ ๋ณ€ํ™˜๊ณผ ํ•จ๊ป˜ ํ™”๋ฉด์— ๋ถ™์—ฌ ์ ธ์„œ ๋ธ”๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ ์‹ค์ œ ํ™”๋ฉด์— ํ”ฝ์…€ ์ •๋ ฌ ๋œ ๊ณต๊ฐ„์—์„œ ์‚ฌ๋ฌผ์„ ๋ž˜์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ž˜์Šคํ„ฐ ํ…์Šค์ฒ˜ ๋Œ€์‹  ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ ๋ช…๋ น์— ๋ถ„์ˆ˜ ๋ณ€ํ™˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  1. ๋ž˜์Šคํ„ฐ ์‹œ์Šคํ…œ์ด ๋ชจ๋“  ์ผ๋ฐ˜ ๋งคํŠธ๋ฆญ์Šค๋กœ ๋ž˜์Šคํ„ฐ ํ•  ์ˆ˜์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. WIP๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์„ฑ๋Šฅ ํšŒ๊ท€๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉฐ์น  ๋‚ด๋กœ ๋๋‚ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
    https://codereview.chromium.org/2075873002/
  2. ํƒ€์ผ๋ง ๊ด€๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๋ž˜์Šคํ„ฐ ๋ณ€ํ™˜๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ํ…์Šค์ฒ˜ ์„ธํŠธ๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๋„๋กํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์›๋ž˜ ์ผ๋ฐ˜ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ํƒ€์ผ ์ ์šฉ ๋ฒ”์œ„ ๊ณ„์‚ฐ์ด ๋งค์šฐ ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฒˆ์—ญ๊ณผ ํฌ๊ธฐ ์กฐ์ • ๋งŒ ์ง€์›ํ•˜๋Š” ๋” ๊ฐ„๋‹จํ•œ ๋ฒ„์ „์„ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋˜ ์ผ์ฃผ์ผ์˜ ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ •ํ•œ๋‹ค.

M53 ์ง€์ ์œผ๋กœ ์ฐฉ๋ฅ™ํ•˜๋ ค๊ณ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ด‰๋ฐ•ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ M54๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

https://bugs.chromium.org/p/chromium/issues/detail?id=600120

๋ฒ„๊ทธ ๋ฆฌํฌํ„ฐ์—๊ฒŒ :

์—…๋กœ๋“œ ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ Chromium์—์„œ ํ”ฝ์…€ ์Šค๋ƒ…์„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ ํ•œ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ผ์— ์ผ๋ถ€ ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋” ์ด์ƒ ๋ฐฐ๊ฒฝ์— ์ด์Œ์ƒˆ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ ์ผ€์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ ํƒ€์ผ ๋‚ด์šฉ๋ฌผ์— ์ด์Œ์ƒˆ๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์–ด๋ ค์šด ๋ฌธ์ œ์ด๋ฉฐ, ์•Œ๋ ค์ง„ ์œ ์ผํ•œ ํ•ด๊ฒฐ์ฑ…์€ CPU / ๋ฉ”๋ชจ๋ฆฌ ๋น„์šฉ์œผ๋กœ ์ธํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” FSAA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณต๊ธ‰ ์—…์ฒด๋Š” ์ผ๋ถ€ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ถ€์ •ํ™• ํ•ด ๋ณด์ด์ง€๋งŒ ์ผ๋ถ€ ์ฝ˜ํ…์ธ ๋ฅผ ๋” ๋ฉ‹์ง€๊ฒŒ ๋ณด์ด๋„๋ก ์ž์ฒด ํœด๋ฆฌ์Šคํ‹ฑ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ : http://jsbin.com/wayapiz/

Chrome์€ ์˜ฌ๋ฐ”๋ฅธ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋กœ ๊ทธ๋ ค ์ง€์ง€๋งŒ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ๋ฉˆ์ถ˜ ๋ผ์ง€์ฒ˜๋Ÿผ ๋ฒˆ์ง‘๋‹ˆ๋‹ค.
Firefox๋Š” ์ฒซ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ 49x49๋กœ, ๋‘ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ 49x50์œผ๋กœ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.
Edge๋Š” ์ฒซ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ 50x50์œผ๋กœ, ๋‘ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ 50x49๋กœ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์•จ๋ฆฌ์–ด์‹ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ์— ํšŒ์ „์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ๊ตฌํ˜„์—์„œ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ๋ธ”๋ฆฌ๋“œ๋ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ถŒ์žฅ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ํƒ€์ผ๊ฐ„์— ๊ฒน์นจ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. A4 ์šฉ์ง€๋กœ ํฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” ๋ชจ๋“  ํฌ๊ธฐ ์กฐ์ • ํ›„ ๊ฐ ํƒ€์ผ์ด ์ ์–ด๋„ ํ•˜๋‚˜์˜ ํ”ฝ์…€์„ ์˜ค๋ฒ„ ๋“œ๋กœ์šฐํ•˜์—ฌ ๊ฐ ๋ฌผ๋ฆฌ์  ํ”ฝ์…€์ด ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๋ถˆํˆฌ๋ช… ํ”ฝ์…€๋กœ ๋ฎ ์ด๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒน์น˜๋Š” ๋„ˆ๋น„๋Š” ์ง€์›ํ•˜๋ ค๋Š” ๊ฐ€์žฅ ์ž‘์€ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1/4 ํฌ๊ธฐ๊นŒ์ง€ ์ง€์›ํ•˜๋ ค๋ฉด 4 ํ”ฝ์…€์˜ ๊ฒน์นจ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œ ์ž์„ธํ•œ ๋ถ„์„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธฐ์ž๊ฐ€ ์—…๋กœ๋“œ ํ•œ ์žฌํ˜„์€ cc์—์„œ ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋‹ค์ง€ ์ข‹์€ ์žฌํ˜„์ด ์•„๋‹™๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๋‹จ์ƒ‰์˜ ๋ ˆ์ด์–ด๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด ์ฝ˜ํ…์ธ  ๋ฐฐ์œจ ๊ฐœ๋…์ด์—†๋Š” SolidColorLayerImpl๋กœ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋‹จ์ˆœํ™” ๋œ ์žฌํ˜„์ž…๋‹ˆ๋‹ค. http://jsbin.com/hodoxew/

๋ธ”๋ž™ ๋ฐ•์Šค๋Š” ํฌ๊ธฐ (100, 100)์˜ SolidColorLayerImpl๋กœ ๊ทธ๋ ค์ง€๋ฉฐ, ํฌ๊ธฐ (100, 100)์˜ ๋‹จ์ผ ๋‹จ์ƒ‰ ์ฟผ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ทธ๋ฆฌ๊ธฐ ๋ณ€ํ™˜์— ์˜ํ•ด ํ™”๋ฉด์— ํˆฌ์˜๋˜์–ด (99.5, 99.5)๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์•คํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”ฝ์…€์˜ ๋งจ ์˜ค๋ฅธ์ชฝ ์—ด๊ณผ ๋งจ ์•„๋ž˜ ํ–‰์ด ๋ฐ˜ํˆฌ๋ช…์œผ๋กœ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ๋ ˆ์ด์–ด์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ cc๋ฅผ ์†์—ฌ ๋ ˆ์ด์–ด๊ฐ€ ๋‹จ์ƒ‰์ด ์•„๋‹Œ ์ƒ‰์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ์ด์ œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋งˆ์ง€๋ง‰ ํƒ€์ผ์€ ๋‹จ์ƒ‰์ž…๋‹ˆ๋‹ค. ์˜ˆ : http://jsbin.com/zexawa/

๋‚ด์šฉ ํฌ๊ธฐ๋Š” ๋ฐ˜์˜ฌ๋ฆผ๋˜๋ฏ€๋กœ ๋ฐฐ์œจ ์กฐ์ • ๋œ ๋ ˆ์ด์–ด ํฌ๊ธฐ๋Š” (600, 300) * 0.995 = (597, 298.5)์— ๋ถˆ๊ณผํ•˜์ง€๋งŒ (597, 299)๋กœ ๊ณผ๋„ํ•˜๊ฒŒ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

  1. ๋ชฉ๋ก ํƒ€์ผ์€ ๋‹จ์ƒ‰์ด ์•„๋‹Œ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ : http://jsbin.com/mewaguf/

๋‚ด์šฉ ํฌ๊ธฐ๋Š” ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹ค์ œ ํฌ๊ธฐ ์กฐ์ • ๋œ ์ฝ˜ํ…์ธ ๋Š” (600, 300) * 0.995 = (597, 298.5) ๋งŒ ํฌํ•จํ•˜๊ณ  ์ƒ์„ฑ ๋œ ์ฟผ๋“œ๋Š” (597,299)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ”ฝ์…€ ํ–‰์€ ์•คํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ์œผ๋กœ ์ธํ•ด ๋ฐ˜ํˆฌ๋ช…ํ•ด์•ผํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“  ์š”์†Œ์˜ ๋ฐฐ๊ฒฝ์ƒ‰ ์ธ ๋ ˆ์ด์–ด ๋ฐฐ๊ฒฝ์ƒ‰์œผ๋กœ ์ฑ„ ์›๋‹ˆ๋‹ค.

๋ฐฐ๊ฒฝ์— ์ด์Œ์ƒˆ๊ฐ€ ์—†์ง€๋งŒ ๋‚ด์šฉ๋ฌผ์ด ๊ทธ๊ฒƒ์„ ๋ฎ์„ ๋•Œ ๋ฐฐ๊ฒฝ์ด ๊ฐ€์žฅ์ž๋ฆฌ์— ๋ฒˆ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ : http://jsbin.com/vigufo/

๋น„๋‹จ ์ƒ‰ ํƒ€์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€ :
http://playground-leaflet.rhcloud.com/giqo/edit?output

@hyperknot ํ™˜์ƒ์ ์ธ ์—…๋ฐ์ดํŠธ์ด์ง€๋งŒ์ด ๋‘ ๋”ฐ์˜ดํ‘œ๋Š” ์„œ๋กœ ๋ชจ์ˆœ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (ํ•œ ์‚ฌ๋žŒ์€ ์ˆ˜์ • ์ž‘์—…์„ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ๋‹ค์Œ ์‚ฌ๋žŒ์€ ์ข‹์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค). ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ์ฑ…์„ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์˜์›ํžˆ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฐ›์•„๋“ค์ผ๊นŒ์š”?

@mourner ์ „์ฒด ๋‚ด์šฉ์„ ํฌํ•จํ•˜์ง€ ์•Š์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‹น์‹  ๋ง์ด ๋งž์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›๋ž˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://bugs.chromium.org/p/chromium/issues/detail?id=600120

ํ•œ ์‹œ์ ์—์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
https://bugs.chromium.org/p/chromium/issues/detail?id=521364

๊ทธ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ์ฑ…๊ณผ ํ•จ๊ป˜ ์›๋ž˜์˜ ๊ธด ํšŒ์‹ ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Leaflet ์ผ€์ด์Šค๊ฐ€ ๊ทธ์˜ ์ž‘์—…์œผ๋กœ ์ธํ•ด ์‹ค์ œ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌผ์—ˆ๊ณ  ๊ทธ๋Š” ๋Œ€๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค.

์ „๋‹จ์ง€ ๋ฌธ์ œ๊ฐ€ ์‚ฌ์‹ค ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ ์œ ๊ฐ์ž…๋‹ˆ๋‹ค. 600120 ํ˜ธ๋ฅผ ๋‹ค์‹œ ์—ด์–ด ๋ถ„์„์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ Leaflet ๋ฒ„๊ทธ๊ฐ€ ๋‹ค์‹œ ์—ด๋ฆฌ๊ณ  Leaflet ๋ฒ„๊ทธ 1์—์„œ ๋‘ ๋ฒˆ์งธ ์‘๋‹ต์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. BTW, ํ˜„์žฌ ์ตœ์‹  ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€๋ณด๊ธฐ ์œ„ํ•ด ๋ชจ๋ฐ”์ผ ๊ตฌ๊ธ€์ง€๋„๋ฅผ ๋ณด์•˜๋‹ค. ๊ทธ๋“ค๋„์ด ๋ฌธ์ œ์— ์‹œ๋‹ฌ๋ฆฌ๊ณ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์ง€๋งŒ, ๋œ ๋ช…ํ™•ํ•˜๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ UI ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋Š” ๋ทฐํฌํŠธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ํ•€์น˜ ์คŒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  JS์—์„œ ํ•€์น˜ ์คŒ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•€์น˜ ์คŒ ์ค‘์—๋„ ํƒ€์ผ ์‚ฌ์ด์˜ ์ด์Œ์ƒˆ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๊ณ ํ•ด์ƒ๋„ ๋””์Šคํ”Œ๋ ˆ์ด์—์„œ๋Š” ๋งค์šฐ ๋ฏธ๋ฌ˜ํ•จ). ํ™•๋Œ€ / ์ถ•์†Œ ์ œ์Šค์ฒ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฐฐ์œจ์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํƒ€์ผ ์„ธํŠธ์— ์Šค๋ƒ…ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒ€์ผ์€ ํ™•๋Œ€ / ์ถ•์†Œ ๋™์ž‘์„ ์ œ์™ธํ•˜๊ณ  ํ•ญ์ƒ ๊ธฐ๋ณธ ํ•ด์ƒ๋„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ์šฐ๋ฆฌ๋Š” ์•„์ง ํ™•์‹คํ•œ ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ์›”์š”์ผ์— ๋‹ค๋ฅธ ํŽ˜์ธํŠธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋…ผ์˜ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

BTW, ๋ชจ๋ฐ”์ผ Google์ง€๋„ (์›น ์‚ฌ์ดํŠธ์˜ ๊ฒƒ ๊ฐ™์•„์š”)๊ฐ€ ์šฐ๋ฆฌ์™€ ๋˜‘๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@mourner @IvanSanchez will-change๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์ด์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•ต์‹ฌ ์งˆ๋ฌธ :
https://bugs.chromium.org/p/chromium/issues/detail?id=600120#c15

ํ˜„์žฌ ๊ณ„์ธตํ™”๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ ํƒ€์ผ์ด ์ž์ฒด ๋ ˆ์ด์–ด (translate3d)๋กœ ๊ฐ•์ œ ์ ์šฉ๋˜๊ณ  ์ด๋Ÿฌํ•œ ๋ ˆ์ด์–ด๋Š” ์ผ๋ถ€ ๋ถ„์ˆ˜ ๊ฐ’์œผ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

๊ฐ ๋งต ํƒ€์ผ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์Šค์ผ€์ผํ•˜๋Š” ํ•œ (๋ ˆ์ด์–ด ์‚ฌ์šฉ ๋˜๋Š” drawImageRect + ๋ถ„์ˆ˜ CTM์„ ํ†ตํ•ด) ๋ถ„์ˆ˜ ์Šค์ผ€์ผ ๊ฐ’์˜ ๊ฒฝ์šฐ ํ”ฝ์…€ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ถˆ์—ฐ์† AA๊ฐ€ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ ๋ฒˆ์ง์„ ์œ ๋ฐœํ•˜๋Š” ์ผ์น˜ํ•˜๋Š” ๊ฐ€์žฅ์ž๋ฆฌ ์•ˆํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹  ์ด๊ฒƒ์ด ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋น„ ๋ถ„์ˆ˜ ์Šค์ผ€์ผ (์˜ˆ : 1.0)๋กœ ๋งต์„ ๋ž˜์Šคํ„ฐ ํ™” ํ•œ ๋‹ค์Œ ์›์ž ์ ์œผ๋กœ ์ถ•์†Œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1) ๊ฐœ๋ณ„ ํƒ€์ผ ๋ ˆ์ด์–ด ํ™” ๋ฐฉ์ง€ ( "transform : translate3d ()"๋Œ€์‹  "transform : translate ()"์‚ฌ์šฉ)
2) ๊ฐ•์ œ ์ปจํ…Œ์ด๋„ˆ (์ „์ฒด ๋งต) ๊ณ„์ธตํ™” (์ปจํ…Œ์ด๋„ˆ์—์„œ "transform : scale3d ()"์‚ฌ์šฉ)
3) ์Šค์ผ€์ผ == 1.0์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด ๋ž˜์Šคํ„ฐ ํ™” ๊ฐ•์ œ

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ๋งต ํƒ€์ผ ์ด๋ฏธ์ง€๋Š” 1.0 ๋ฐฐ์œจ๋กœ ๋ž˜์Šคํ„ฐ ํ™”๋˜์–ด์•ผํ•˜๋ฉฐ (=> ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ํ”ฝ์…€ ์ •๋ ฌ => ์‹œ๋ฐ ์•„ํ‹ฐํŒฉํŠธ ์—†์Œ) ์ „์ฒด ๋งต ๋ ˆ์ด์–ด์˜ ๋ฐฐ์œจ์„ ์›์ž ์ ์œผ๋กœ ์ถ•์†Œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ # 3์€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์ œ๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€

  • scale (1) ๋ฐ will-change : transform์œผ๋กœ ์‹œ์ž‘ (์ž์„ธํ•œ ๋‚ด์šฉ์€ https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/Ufwrhx_iZ7U ์ฐธ์กฐ)
  • ์ฒซ ๋ฒˆ์งธ ๋ž˜์Šคํ„ฐ ํŒจ์Šค ํ›„ ๋ ˆ์ด์–ด ๋ฐฐ์œจ์„ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •

์˜ˆ : http://jsbin.com/yaqeru/10/embed?output

chrishtr / danakj ๋ ˆ์ด์–ด ๋ž˜์Šคํ„ฐ ์Šค์ผ€์ผ ์˜๋ฏธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ป์—ˆ์œผ๋ฉฐ ๋ ˆ์ด์–ด ๋ž˜์Šคํ„ฐ ํ™” ์Šค์ผ€์ผ์„ ํŠน์ • ๊ฐ’์œผ๋กœ ์ž ๊ทธ๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋Œ€๋‹ต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ˆ˜์ •์ด ์ง„ํ–‰ ์ค‘์ด ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ (๊ทธ๊ฒƒ์„ ๋ฐ€์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!) ๊ทธ๋™์•ˆ ...

https://gist.github.com/ericsoco/5712076f69f9068b11d41262b9e93666

import leaflet from 'leaflet';
// ...
patchMapTileGapBug();
// ...
function patchMapTileGapBug () {

    // Workaround for 1px lines appearing in some browsers due to fractional transforms
    // and resulting anti-aliasing. adapted from <strong i="9">@cmulders</strong>' solution:
    // https://github.com/Leaflet/Leaflet/issues/3575#issuecomment-150544739
    let originalInitTile = leaflet.GridLayer.prototype._initTile;
    if (originalInitTile.isPatched) return;

    leaflet.GridLayer.include({
        _initTile: function (tile) {
            originalInitTile.call(this, tile);

            var tileSize = this.getTileSize();

            tile.style.width = tileSize.x + 1 + 'px';
            tile.style.height = tileSize.y + 1 + 'px';
        }
    });

    leaflet.GridLayer.prototype._initTile.isPatched = true;

}

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๊ณ ์žˆ์–ด์„œ ๊ธฐ์˜๋‹ค. ๋œ ์ด์ƒ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์œ ์šฉํ•œ ๊ฒฝ์šฐ : ๊ด€์„ฑ์„ ํฌ์ƒํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋งต ์ดˆ๊ธฐํ™”์—์„œ intertia:false ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๊ฐ„๊ฒฉ์ด ์ œ๊ฑฐ๋˜๊ณ  zoomAnimation:false

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ (๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•œ) ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜๋‹ค ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ https://github.com/Leaflet/Leaflet.TileLayer.NoGap์— ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค-์„ฑ๋Šฅ์ด ํ™•์‹คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜๊ฒฌ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ์ปดํ“จํ„ฐ / ํœด๋Œ€ ์ „ํ™”์—์„œ

cc @Eschon @hyperknot

BTW, ๋ฒ„๊ทธ๋Š” ๋ฆฌํ”Œ๋ › ๋ถ€๋ถ„ ํ™•๋Œ€ ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€ / ์ถ•์†Œ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”์—†์ด ๋†’์€ DPI (2560x1140) ํ™”๋ฉด์—์„œ Chrome์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋Šฆ์€ ๋‹ต๋ณ€ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋ชจ๊ฐ€ ์ž˜ ์ž‘๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ด์ „ 1.0-dev ๋ฒ„์ „์˜ Leaflet์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— http://leafletjs.com/download.html ์—์„œ 1.0.0-rc3๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์€ ์—ฌ๊ธฐ ์— ์˜ค๋ฅ˜๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ •์˜๋˜์ง€ ์•Š์€ ๋งคํ•‘ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์–ด this._map ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ›„ ์ž‘๋™ํ–ˆ์ง€๋งŒ ๋‚ด ์ž‘์—…์šฉ ์ปดํ“จํ„ฐ์—์„œ ์ •๋ง ๋Š๋ฆฝ๋‹ˆ๋‹ค. ํŠนํžˆ ํฌ๋กฌ์—์„œ๋Š” ํŒŒ์ด์–ด ํญ์Šค๋„ ๋Š๋ ธ๋‹ค.

๋†€๋ž๊ฒŒ๋„ ์ œ๊ฐ€ ํ…Œ์ŠคํŠธ ํ•œ ํœด๋Œ€ํฐ์—๋Š” ๊ทธ๋‹ค์ง€ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
Android์˜ Firefox๋Š” ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ณด์ด์ง€๋งŒ Chrome์€ ์•ฝ๊ฐ„ ๋Š๋ฆฌ์ง€ ๋งŒ ๋‚˜์˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
iOS์˜ Safari๋„ ์ด์ „๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•Œ์•„ ์ฐจ๋ฆฐ ๋˜ ๋‹ค๋ฅธ ์ด์ƒํ•œ ์ ์€ ๋ชจ๋ฐ”์ผ Chrome ๋ฐ Safari์—์„œ ํ•€์น˜ ์คŒ์ด ๊ณ ์ • ์ˆ˜์ค€์œผ๋กœ ์Šค๋ƒ…๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Eschon ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ํ•ญ์ƒ ์ž…๋ ฅ์˜ ์‹ค์ˆ˜ํ•˜๊ธฐ map ๋Œ€์‹  this._map :-(์„

๊ทธ ํ›„ ์ž‘๋™ํ–ˆ์ง€๋งŒ ๋‚ด ์ž‘์—…์šฉ ์ปดํ“จํ„ฐ์—์„œ ์ •๋ง ๋Š๋ฆฝ๋‹ˆ๋‹ค. ํŠนํžˆ ํฌ๋กฌ์—์„œ๋Š” ํŒŒ์ด์–ด ํญ์Šค๋„ ๋Š๋ ธ๋‹ค.

ํ•ด๋‹น ์ปดํ“จํ„ฐ์—์„œ ํ”„๋กœํŒŒ์ผ ๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์†์ด ์บ”๋ฒ„์Šค ์ž‘์—…๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์•„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. IE9-IE11์—์„œ ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์ด ์ผ๋ถ€ ํ”Œ๋žซํผ์—์„œ ๋งต์„ ๋Š๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์™„์ „ํžˆ ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์  ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ํ”ผ๋“œ๋ฐฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!

OL3 ์‚ฌ๋žŒ๋“ค์ด์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”์ง€, ์บ”๋ฒ„์Šค ํ•ฉ์„ฑ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„ฑ๋Šฅ ๊ฐ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์‹ค์ œ๋กœ ์‚ดํŽด ๋ณด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•Œ์•„ ์ฐจ๋ฆฐ ๋˜ ๋‹ค๋ฅธ ์ด์ƒํ•œ ์ ์€ ๋ชจ๋ฐ”์ผ Chrome ๋ฐ Safari์—์„œ ํ•€์น˜ ์คŒ์ด ๊ณ ์ • ์ˆ˜์ค€์œผ๋กœ ์Šค๋ƒ…๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

zoomDelta ๋ฐ zoomSnap ์˜ต์…˜์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๋ฉฐ์ด ๋ฒ„๊ทธ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ปดํ“จํ„ฐ์—์„œ ํ”„๋กœํŒŒ์ผ ๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์†์ด ์บ”๋ฒ„์Šค ์ž‘์—…๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์•„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. IE9-IE11์—์„œ ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

Chrome ๊ฐœ๋ฐœ ๋„๊ตฌ๋กœ JavaScript CPU ํ”„๋กœํ•„์„ ๊ธฐ๋กํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์ด ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผํ• ์ง€ ์ •๋ง๋กœ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋ž˜, ๊ทธ๊ฒŒ ๋ฌธ์ œ ์•ผ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ถˆ๊ฝƒ ์ฐจํŠธ์—์„œ ๋„“์€ ๊ฒƒ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด์žˆ๋Š” ํ”„๋กœํ•„์„ ์ž‘์„ฑํ–ˆ๊ณ  ๊ทธ๊ฒƒ์—†์ด ๋‹ค๋ฅธ ํ”„๋กœํ•„์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ํ”„๋กœํ•„์— ๋Œ€ํ•ด ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ๋œ ๋ฒ„์ „์ด _onZoomTransitionEnd ์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ถ”๊ฐ€ "ํ”ผํฌ"(์ •ํ™•ํ•œ ๋‹จ์–ด์ธ์ง€ ๋ชจ๋ฅด๊ฒ  ์Œ)๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ์ด์—†๋Š” ๋ฒ„์ „์—์„œ๋Š” _onZoomTransitionEnd 1.8ms๊ฐ€ ๊ฑธ๋ ธ๊ณ  ์ฐจํŠธ์—๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์ด์žˆ๋Š” ๋ฒ„์ „์—์„œ๋Š” 6ms๊ฐ€ ๊ฑธ๋ ธ๊ณ  ํ™œ๋™์ด "์ตœ๋Œ€"๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋‘ "ํ”ผํฌ"๋Š” ๋‘ ํ”„๋กœํ•„์—์„œ ๋งค์šฐ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ˆ˜์ • ๋ฒ„์ „์—์„œ๋Š” ๊ทธ ์ฐจ์ด๊ฐ€ ๋” ํฝ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋“  ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‘ ํ”„๋กœํ•„์„ ์ €์žฅ ํ–ˆ์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์–ด๋”˜๊ฐ€์— ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น๋ถ„๊ฐ„ ๋”๋Ÿฌ์šด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ฑฐ์˜ ์™„์ „ํžˆ ๊ฐ„๊ฒฉ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฐ ํƒ€์ผ์— translate3d ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ์›๋ž˜ ํ•จ์ˆ˜์— .002์˜ ๋ฐฐ์œจ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ".002"๋Š” ๊ฒฉ์ฐจ๋ฅผ ์™„์ „ํžˆ ์—†์• ๊ธฐ ์œ„ํ•ด ๋‚ด ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์Šค์ผ€์ผ๋ง ์š”์†Œ์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ๋ถ€์ž‘์šฉ๋„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  Chrome, Firefox ๋ฐ IE 11์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ๋‹ค์–‘ํ•œ ํ™•๋Œ€ / ์ถ•์†Œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐฝ ๋ฐฐ์œจ์„ 150 %๋กœ ์„ค์ • ํ•œ 40 "4k ๋ชจ๋‹ˆํ„ฐ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? @AlexanderUhl ์†”๋ฃจ์…˜์ด ๋ฐฐ์น˜ ๋  ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ด๋™ / ํ™•๋Œ€ / ์ถ•์†Œ ์ค‘์— ๋งŒ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด will-change CSS ์†์„ฑ์ด ์ถ”๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์„ค๋ช… ๋œ FF ์„ฑ๋Šฅ ๊ฒฝ๊ณ  ๋งŒ ํ™•์ธํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. https://github.com/Leaflet/Leaflet/issues/4686

@themre : scale ์†์„ฑ์€ ์ถ”๊ฐ€ ๋  ๋•Œ ๋ชจ๋“  ์ด๋ฏธ์ง€ ํƒ€์ผ์— ์ ์šฉ๋˜๋ฉฐ ์˜๊ตฌ์ ์ž…๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
style="width: 256px; height: 256px; transform: translate3d(545px, 745px, 0px) scale(1.002); opacity: 1;"

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์›์น˜ ์•Š๋Š” ํšจ๊ณผ ์ธ ์ด๋ฏธ์ง€๊ฐ€ ์•ฝ๊ฐ„ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. will-change CSS ์†์„ฑ์ด์žˆ๋Š” 1.0.3 ๋ฒ„์ „์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํฐ์ƒ‰ ๊ฐ„๊ฒฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Ofc ๊ทธ๊ฒƒ์€ img๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์ด ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค ;-) ๋‚˜๋Š”์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ด์ƒ์ ์ด ์•„๋‹ˆ๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ๋ณธ์งˆ ์ธ tbh, ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฌด์‹œํ•  ์ˆ˜์žˆ๋Š” ๋ถ€์ž‘์šฉ์œผ๋กœ ๋‚˜์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค (mapbox, here, osm ๋“ฑ์˜ ํƒ€์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๋งคํ•‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ).

์Œ, ์ •์ƒ์ ์ธ translate ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. translate3d CSS ์†์„ฑ์ด ์ผ๋ฐ˜ ๋ฒˆ์—ญ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์˜ต์…˜์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. translate3d๋ฅผ translate๋กœ ๋Œ€์ฒด ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋ณด๊ธฐ :
translatemap

image
์ตœ์‹  ๋ฒ„์ „ (1.0.3)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ 1.1์—์„œ ์ˆ˜์ • ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2017 ๋…„ 3 ์›” 8 ์ผ ์ˆ˜์š”์ผ 10:13, Gaurav [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

[์ด๋ฏธ์ง€ : ์ด๋ฏธ์ง€]
https://cloud.githubusercontent.com/assets/13112509/23697357/7dcc4cf6-040d-11e7-881a-df3a44254015.png
์ตœ์‹  ๋ฒ„์ „ (1.0.3)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/Leaflet/Leaflet/issues/3575#issuecomment-284987808 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAeKj_23QbtFCaXeFjGRJcU-jg0284xBks5rjnEvgaJpZM4FO8Jh
.

.leaflet-pane.leaflet-map-pane div๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” nx ๋ฐ ny ๊ฐ’์ด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋˜๋ฉด Safari์—์„œ ์ค„ / ๊ฐ„๊ฒฉ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ด๋กœ์šด ๋ถ€์ž‘์šฉ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (๋‚ด ์‚ฌ์šฉ์„ ์œ„ํ•ด).

์ด๊ฒƒ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค :
translate3d("+n.x+"px,"+n.y+"px,0)")
๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒดํ•˜์‹ญ์‹œ์˜ค.
translate3d("+Math.round(n.x)+"px,"+Math.round(n.y)+"px,0)")

@LudwigBogner (๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€ / ์ถ•์†Œ ์„ค์ •, ์˜ˆ๋ฅผ ๋“ค์–ด ํ™•๋Œ€ / ์ถ•์†Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ค‘)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์–ด์จŒ๋“  ์‹คํŒจ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆ์—ญ ์ž์ฒด๊ฐ€ ๋ฐ˜์˜ฌ๋ฆผ ๋œ ์œ„์— ๋งํฌ ๋œ์ด ์˜ˆ์ œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. http://playground-leaflet.rhcloud.com/vicu/edit?html , output

์ด๊ฒƒ์— ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ Chromium์ด๋‚˜ FireFox์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Safari์˜ ์ผ๋ถ€ ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ์ž…๋‹ˆ๋‹ค.

์ง„ํ–‰?

์ด ๋ฌธ์ œ๋Š” Chrome ๋ฐ Firefox (Mac)์— ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” zoomDelta์™€ 0.25์˜ zoomSnap์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒํ•˜๊ฒŒ๋„ .leaflet-tile { will-change: auto !important; } (๋˜๋Š” "unset")๋ฅผ ์„ค์ •ํ•˜๋ฉด Firefox (์ „์šฉ)์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ Chrome์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€์„ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋ฐ˜์˜ฌ๋ฆผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด translate3d ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ ๋œ ๋‹ค๋ฅธ ์ˆ˜์ • ์‚ฌํ•ญ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@jawinn L_DISABLE_3D ์„ true ๋กœ ์„ค์ •ํ•˜๋ฉด ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. IIRC๋Š” will-change ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„. ์คŒ ์• ๋‹ˆ๋ฉ”์ด์…˜, ํŒจ๋‹ ๋“ฑ์— ๋Œ€ํ•ด ํ›จ์”ฌ ๋” ๋‚˜์œ ์„ฑ๋Šฅ์„ ์ œ๊ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ € ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋งค์šฐ ๋ฏผ๊ฐํ•˜๋ฏ€๋กœ์ด ๋ฌธ์ œ๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ์‚ดํŽด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ—‰
๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์œ„์˜ @cmulders์— ์˜ํ•œ

/* 
 * Workaround for 1px lines appearing in some browsers due to fractional transforms
 * and resulting anti-aliasing.
 * https://github.com/Leaflet/Leaflet/issues/3575
 */
(function(){
    var originalInitTile = L.GridLayer.prototype._initTile
    L.GridLayer.include({
        _initTile: function (tile) {
            originalInitTile.call(this, tile);

            var tileSize = this.getTileSize();

            tile.style.width = tileSize.x + 1 + 'px';
            tile.style.height = tileSize.y + 1 + 'px';
        }
    });
})()

์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. @Eschon ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. Chrome ๋˜๋Š” Firefox์— ๋” ์ด์ƒ ๊ณต๋ฐฑ์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

"1px ์ˆ˜์ •"์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๊ฐ€ ํ๋ฆฟ ํ•ด์ง€๊ณ  ์•ฝ๊ฐ„ ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ํฌํ† ์ƒตํ•˜๋Š” ๋ฐ ๋ช‡ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๋˜ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ์šฉ๋‚ฉ ํ•  ์ˆ˜์—†๋Š” ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” L_DISABLE_3D = true ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฒฐ๊ตญ์—๋Š” ๊นœ๋นก์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ธ‰๊ฒฉํ•œ ํ™•๋Œ€๋ฅผ ๊ฐ์ˆ˜ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค ..

์ถ”๊ฐ€ ์ •๋ณด : ์ €๋Š” leaflet-rastercoords ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‚ด์ง€๋„ ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    map = L.map('map', {
        center: [3250, 1700],
        zoom: 5,
        minZoom: 2,
        maxZoom: 6,
        maxBoundsViscosity: 1,
    });

Q : "ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„"๋ฒ„๊ทธ๊ฐ€์—†๋Š” Leaflet์˜ ์ฐจ์„ ์ฑ…์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ง์ ‘ Google๋กœ ๊ฒ€์ƒ‰ ํ•ด๋ณด ๊ฒ ์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€ ์ด๋ฏธ์ด ๊ธธ์„ ํƒํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@ n3tman NoGap ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์‚ฌ์šฉํ•ด

@perliedman ์ด๊ฒƒ์„ ์–ธ๊ธ‰ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์•ˆํƒ€๊น๊ฒŒ๋„ ๋กœ์ปฌ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. _initContainer ํ•จ์ˆ˜์—์„œ Cannot read property 'appendChild' of undefined ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ๋ฒ„์ „์˜ Leaflet (์ตœ๋Œ€ 1.0.2)์œผ๋กœ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค-๋™์ผํ•œ ๊ฒฐ๊ณผ. ๋ฐ๋ชจ ๋Š” Chrome / Firefox์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
๋ถ„๋ช…ํ•œ ๊ฒƒ์ด ๋ˆ„๋ฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์™€ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—๋„ ๋™์ผํ•œ 1px ๊ฐ„๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Chrome ๋ฒ„์ „ 66.0.3359.139 (64 ๋น„ํŠธ)
Windows 10 (1709)
๋ฆฌํ”Œ๋ฆฟ 1.3.1

์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ์—ด์—ˆ์„ ๋•Œ ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ์ง€๋งŒ ๋” ์ด์ƒ ์œ ์ผํ•œ ์›์ธ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— GoogleMutant ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€์„ ์ •์ˆ˜๋กœ ์„ค์ •ํ•˜๊ณ 

ํ™•๋Œ€ / ์ถ•์†Œ ๋ฐ ์ด๋™์‹œ ๊ฐ„๊ฒฉ์ด ์—ฌ์ „ํžˆ ํ‘œ์‹œ๋˜์ง€๋งŒ # 6069์™€ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ # 6240์— ์˜ํ•ด ์ˆ˜์ • ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ ๊ฑฐ๊ธฐ์—์„œ๋„ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ GoogleMutant ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@cmulders 1px ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—์„œ ์˜๊ฐ์„

(function(){
    var originalInitTile = L.GridLayer.prototype._initTile
    L.GridLayer.include({
        _initTile: function (tile) {
            originalInitTile.call(this, tile);

            var tileSize = this.getTileSize();
            var map = this._map;
            var isFix = function() {
                return !(parseFloat(tile.style.width) % 0 === 0);
            };
            var fixOn = function() {
                if(!isFix()) return;
                tile.style.width = tileSize.x + 0.5 + 'px';
                tile.style.height = tileSize.y + 0.5 + 'px';
            };
            var fixOff = function() {
                if(isFix()) return;
                tile.style.width = tileSize.x + 'px';
                tile.style.height = tileSize.y + 'px';
            };
            var checkFix = function(){
                var zoom = map.getZoom();
                if(zoom % 1 === 0) {
                    fixOff();
                }
                else {
                    fixOn();
                }                
            };
            map.on('zoomstart',fixOn);
            map.on('zoomend',checkFix);
            checkFix();
        }
    });
})()

screen shot 2018-09-28 at 3 56 33 pm
3 ๋…„์ด ์ง€๋‚œ ํ›„์—๋„์ด ๋ฒ„๊ทธ๋Š” ์—ฌ์ „ํžˆ Chrome์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค! Firefox ๋˜๋Š” Safari์—์„œ ํšจ๊ณผ๊ฐ€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—… ํ•ด์ฃผ์‹  @cmulders ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์—ฌ๊ธฐ์—์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค (Windows 7 Enterprise SP1). Firefox์˜ ์—ฌ๊ธฐ ์ €๊ธฐ ๋ผ์ธ, Chrome์—์„œ๋Š” ์™„์ „ํ•œ ๋ผ์ธ ๊ทธ๋ฆฌ๋“œ, IE11์—์„œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. @cmulders fix๋Š” Firefox ๋ฐ Chrome์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ์˜ ์ „์ฒด ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

  • Windows 7 Enterprise SP1

    • IE11 : ํ™•์ธ

    • Chrome, Firefox : ๋น„์ •์ƒ

  • ์œˆ๋„์šฐ 10

    • IE11, Edge, Firefox : ํ™•์ธ

    • ํฌ๋กฌ : ๊ดœ์ฐฎ์ง€ ์•Š์Œ

  • ๋งฅ OS

    • Safari, Chrome, Firefox : ํ™•์ธ

  • ๋ฆฌ๋ˆ…์Šค :

    • Chrome, Firefox : ํ™•์ธ

  • ๊ธฐ๊ณ„์  ์ธ์กฐ ์ธ๊ฐ„:

    • Chrome, Firefox : ํ™•์ธ

    • WebView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ : ํ™•์ธ

์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๋Š” ์ด๊ฒƒ์ด Leaflet๊ณผ ๊ด€๋ จ์ด์—†๋Š” ๋งค์šฐ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ฌธ์ œ์ž„์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
Windows 7 Enterprise SP1์—์„œ์˜ ํ…Œ์ŠคํŠธ๋Š” ์ฒ˜์Œ์— ๋‘ ๋Œ€์˜ ๋‹ค๋ฅธ PC์—์„œ ์ด๋ฃจ์–ด์กŒ์ง€๋งŒ ๋‘˜ ๋‹ค NVIDIA ๊ทธ๋ž˜ํ”ฝ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

AMD Radeon ๊ทธ๋ž˜ํ”ฝ์„ ์‚ฌ์šฉํ•˜๋Š” Windows 7 Enterprise SP1์—์„œ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ Chrome ๋˜๋Š” Firefox์˜ ํƒ€์ผ ์‚ฌ์ด์— ์ค„์ด์—†๋Š” ์ƒํƒœ๋กœ ๊ดœ์ฐฎ ์•˜์Šต๋‹ˆ๋‹ค!

NoGap ์ด ์ด์ „์— ์–ธ๊ธ‰ ๋˜์—ˆ ๋“ฏ์ด, ์ €๋Š” ์›๋ž˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ ์™€์„œ ํ˜„์žฌ ๋ฆฌํ”Œ๋ › ๋ฒ„์ „ (์˜ˆ : ๋ฆฌํ”Œ๋ › ^ 1.3.3)์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Œ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.
https://github.com/Endebert/squadmc/blob/master/src/assets/Leaflet_extensions/NoGapTileLayer.js

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ๋ฐ˜ TileLayer์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/Endebert/squadmc/blob/master/src/assets/SquadMap.js#L34

es6 ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

NoGap ์ด ์ด์ „์— ์–ธ๊ธ‰ ๋˜์—ˆ ๋“ฏ์ด, ์ €๋Š” ์›๋ž˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ ์™€์„œ ํ˜„์žฌ ๋ฆฌํ”Œ๋ › ๋ฒ„์ „ (์˜ˆ : ๋ฆฌํ”Œ๋ › ^ 1.3.3)์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Œ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.
https://github.com/Endebert/squadmc/blob/master/src/assets/Leaflet_extensions/NoGapTileLayer.js

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ๋ฐ˜ TileLayer์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/Endebert/squadmc/blob/master/src/assets/SquadMap.js#L34

es6 ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@Endebert NoGap์ด ์ž‘๋™ํ•˜๋„๋ก ๊ด€๋ฆฌ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์–ผ๋งˆ ์ „์— @ n3tman ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
Cannot read property 'appendChild' of undefined _initContainer ํ•จ์ˆ˜์— Cannot read property 'appendChild' of undefined ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Š” ๋‚ด๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ฒ„์ „์—์„œ ๋ฐœ๊ฒฌ ๋ณ€๊ฒฝ try ... catch ํ†ตํ™”์— level.ctx.drawImage(imageSource, offset.x, offset.y, tileSize.x, tileSize.y);
๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@TomazicM ์˜ˆ, ๋‚ด ์•ฑ SquadMC ์—์„œ ๊ตฌํ˜„์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š” ๊ทธ๋‹ค์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ์Šค๋ƒ…์—†๋Š” ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ๊ฐ€ ํ™œ์„ฑํ™” ๋œ ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„๊ณผ ๊ด€๋ จํ•˜์—ฌ : ์›๋ž˜ ๋ฒ„์ „์€ TileLayer.include() ์‚ฌ์šฉํ•˜๊ณ  TileLayer.extend() ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด TileLayer ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋„๋ก ์˜๋„ ๋œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

์Œ, ์—ฌ๊ธฐ 2 ์‹œ๊ฐ„ ๋™์•ˆ ์กฐ์‚ฌํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” translate3d ๋‚ด์˜ ํ”ฝ์…€ ์†Œ์ˆ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

<div class="leaflet-pane leaflet-map-pane" style="transform: translate3d(-10.7773px, -8.41406px, 0px);"></div>

์ด๊ฒƒ์ด ์†Œ์Šค ์ฝ”๋“œ ์˜์ด translate3d ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— L_DISABLE_3D = true ์™€ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…

์‹ญ์ง„์ˆ˜ ํ”ฝ์…€์„ ํ—ˆ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

```js
var pos = (offset && offset.round()) || new Point(0, 0);
```

  • ๋˜๋Š” ์ˆ˜๋งŽ์€ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์œผ๋กœ ...

์Œ, ์—ฌ๊ธฐ 2 ์‹œ๊ฐ„ ๋™์•ˆ ์กฐ์‚ฌํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” translate3d ๋‚ด์˜ ํ”ฝ์…€ ์†Œ์ˆ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ 2019 ๋…„์ด๊ณ  translate3d ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ GPU๋ฅผ ์‚ฌ์šฉํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž˜ ํ–ˆ์–ด @mdorda

@mdorda ์•ˆ๋…•ํ•˜์„ธ์š”! ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ ๋ฐ˜์˜ฌ๋ฆผ์€ https://github.com/Leaflet/Leaflet/issues/3575#issuecomment -327237235์—์„œ ์ด์ „์— ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ดํ›„๋กœ ์ค‘์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋€Œ ์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ฒ ์ €ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋งˆ์น˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํฌ๋ง์„ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” PR์„ ์ œ์ถœํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Angular 2+๋กœ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์˜๋ฏธ์— ๋Œ€ํ•ด์„œ๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค ...

const tileLayer = new TileLayer(this.tileLayerUrlTemplate, this.tileLayerOptions);
tileLayer.on('load', () => {
    for (const tile of Array.from(document.getElementsByClassName('leaflet-tile'))) {
        (<HTMLElement>tile).style.height = (tile.clientHeight + 1) + 'px';
        (<HTMLElement>tile).style.width = (tile.clientWidth + 1) + 'px';
    }
});
this.map.addLayer(tileLayer);

Mozilla Firefox 69.0.1 (64 ๋น„ํŠธ)์ด ์„ค์น˜๋œ Windows 10 Pro 1903์˜ LeafletJS ๋ฒ„์ „ 1.5.1์—์„œ ๋ถ€๋ถ„ ํ™•๋Œ€์‹œ์ด ํ”ฝ์…€ ๊ฐ„๊ฒฉ์ด ๋ณด์ž…๋‹ˆ๋‹ค.
ํ”ฝ์…€ ๊ฐ„๊ฒฉ
ํ”ฝ์…€ ๊ฐ„๊ฒฉ์˜ ์›์ธ์€ translate3d () CSS ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ scale () ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
image
๋ฒ„์ „ 1.5.1์—์„œ๋Š” ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด translate3d () ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.


๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. IMMSPgisgroup

์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

์ด ์ˆœ๊ฐ„์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

error

๋‚˜๋Š” ussing :

  • ์œˆ๋„์šฐ 10 ํ™ˆ 1803
  • Google Chrome Versiรณn 77.0.3865.90 (Build oficial) (64 ๋น„ํŠธ)
  • ๋ฆฌํ”Œ๋ฆฟ 1.5.1

Firefox๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํฐ์ƒ‰ ์„ ์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

no_error

๋ฟก ๋นต๋€จ

Na ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ช‡ ๋…„ ๋™์•ˆ ๋ˆˆ์„ ๋–ด๋‹ค. ๊ทธ๋“ค์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํฐ ํƒ€ํ˜‘ ์—†์ด๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ์›์ธ์€ ํฌ๋กฌ ์—…์ŠคํŠธ๋ฆผ : https://bugs.chromium.org/p/chromium/issues/detail?id=600120

Chromium ํŒ€์˜ ์ตœ์‹  ๋ฉ”์‹œ์ง€๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๊ณ ๋Š”ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต ๊ธฐ ๋•Œ๋ฌธ์— ์ž ์‹œ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ ์–ด๋‘์šด์ง€๋„ ๋‚˜ ์ด๋ฏธ์ง€ (์ œ ๊ฒฝ์šฐ์—๋Š”)์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๋‹นํžˆ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. Ivan์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ์•คํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ์œผ๋กœ ์ธํ•ด ํ™•๋Œ€ / ์ถ•์†Œ ์ค‘์— _fractional_ ๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„ ๋•Œ๊นŒ์ง€์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (๋˜๋Š” ํ•ดํ‚น)์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ผ์„ 1 ํ”ฝ์…€ ๋” ํฌ๊ฒŒ ๋งŒ๋“ค๊ณ  ๋ถ€์ž‘์šฉ์ด 1 ํ”ฝ์…€๋งŒํผ ๊ฒน์น˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ํƒ€์ผ์ด ์•ฝ๊ฐ„ ํ™•๋Œ€๋˜๊ณ  ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค (1px).

/* 
 * Workaround for 1px lines appearing in some browsers due to fractional transforms
 * and resulting anti-aliasing.
 * https://github.com/Leaflet/Leaflet/issues/3575
 */
(function(){
    var originalInitTile = L.GridLayer.prototype._initTile
    L.GridLayer.include({
        _initTile: function (tile) {
            originalInitTile.call(this, tile);

            var tileSize = this.getTileSize();

            tile.style.width = tileSize.x + 1 + 'px';
            tile.style.height = tileSize.y + 1 + 'px';
        }
    });
})()

์šฐ๋ฆฌ๋Š”์ด ์†”๋ฃจ์…˜์œผ๋กœ ๋งŽ์€ ํ–‰์šด์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์šฐ๋ฆฌ ์˜๊ฒฌ์œผ๋กœ๋Š” ์„ ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋งต์˜ ๋ฐฐ๊ฒฝ์ƒ‰์ด๋ฒ ์ด์Šค ๋งต์˜ ์ƒ‰์ƒ๊ณผ ๋” ์ผ์น˜ํ•˜๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ”๋‹ค๊ฐ€ ์ง„ํ•œ ํŒŒ๋ž€์ƒ‰์ด๋ผ๋ฉด ํƒ€์ผ์ด ํ•ด๋‹น ์ƒ‰์ƒ์— ๊ฒน์ณ ์ง€๋„๋กํ•˜์—ฌ ๋ˆˆ์— ๋„๋Š” ๋ถˆ์ผ์น˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

@colbyfayock ์†”๋ฃจ์…˜์„ ์–ด๋””์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๊นŒ?

๋ฐ˜์‘ ์•ฑ์„ ๊ตฌ์ถ• ์ค‘์ด๋ฏ€๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

// Fix via https://github.com/Leaflet/Leaflet/issues/3575#issuecomment-150544739
import L from 'leaflet';

(function () {
  if (!L || !L.GridLayer || !L.GridLayer.prototype) return;

  var originalInitTile = L.GridLayer.prototype._initTile;

  L.GridLayer.include({
    _initTile: function (tile) {
      originalInitTile.call(this, tile);

      var tileSize = this.getTileSize();

      tile.style.width = tileSize.x + 1 + 'px';
      tile.style.height = tileSize.y + 1 + 'px';
    }
  });
})();

์ƒ๋‹จ์˜ ๋ฐ˜ํ™˜์€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋˜๊ณ  ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (์—ฌ๊ธฐ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ).

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „๋‹จ์ง€๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ๊ฐ„๋‹จํžˆ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

import L from 'leaflet';
...
import '../plugins/leaflet-tilelayer-subpixel-fix';

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์†Œ์Šค ์ฝ”๋“œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ€ํ™˜ ๊ฐ’์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฐ˜์‘๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€๋งŒ JQuery์ด๋ฏ€๋กœ ๋ชจ๋“  ํ”„๋ŸฐํŠธ ์—”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์ด ์ตœ์„ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋๋‚ด์‹ญ์‹œ์˜ค.
์ด๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ˆˆ์— ๋„๋Š” ํ๋ฆผ์ด๋‚˜ ๊ฒฐํ•จ์„ ๊ด€์ฐฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ• ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    this.leftMap.on('move', () => {
      const mapDiv = window.document.getElementsByClassName("leaflet-pane leaflet-map-pane")
      let styleString = mapDiv.getAttribute("style");
      const transformValue = styleString.substring(styleString.indexOf("(")+1,styleString.indexOf("px,"));
      const roundedTransformValue = Math.round(parseFloat(transformValue));
      styleString = styleString.replace(transformValue,roundedTransformValue);
      mapDiv.setAttribute("style",styleString);
    });

@colbyfayock- ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๊ณ ์น˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :(

์คŒ ์Šค๋ƒ… 0์œผ๋กœ ๋ฐ˜์‘ ์ „๋‹จ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

image

์†”๋ฃจ์…˜์€ ์šฐ๋ฆฌ์—๊ฒŒ ์™„๋ฒฝํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ, ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ์ผ๊ด€๋œ ๋ผ์ธ์€ ํ™•์‹คํžˆ ์—†์Šต๋‹ˆ๋‹ค. zoomSnap ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž˜ ๋ชฐ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ์•„๋ณด์•„์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์„ ์ฝ๋Š” ๋ฐฉ๋ฒ•์—์„œ 0 ๊ฐ€ ํ•ด๋‹น ์†์„ฑ๊ณผ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ค„์ด ์—†์ด๋„ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฑฐํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?

https://leafletjs.com/examples/zoom-levels/#fractional -zoom

ํŽธ์ง‘ : ์˜ˆ์ œ gif ์ดํ›„ ๊ณ„์† ์ฝ๊ธฐ

zoomSnap์€ 0์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Leaflet์ด ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€์„ ๋งž์ถ”์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜์ด ์ „์ฒด ์ •์ˆ˜ ๊ธฐ๋ณธ ์Šค๋ƒ…์„ ์ดˆ๊ณผํ•˜์—ฌ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†๋‹ค๋Š” ๋ถ„์ˆ˜ ์ƒํƒœ์— ๋น ์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ „๋‹จ์ง€ 1.7-dev ๋ฐ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค. Windows 7 ๋ฐ Windows 10์—์„œ Firefox ๋ฐ Chrome์˜ ํƒ€์ผ ๊ฒฝ๊ณ„์„ . IE11 ๋ฐ ์ด์ „ (๋น„ Crome) Edge์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ์ƒˆ๋กœ์šด Chrome ๊ธฐ๋ฐ˜ Edge์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์ž‘์—… ์†”๋ฃจ์…˜์ด ์žˆ์ง€๋งŒ ๊ทธ์ค‘ ํ•˜๋‚˜๋„ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” <script>L_DISABLE_3D = true;</script> 3d๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ž‘์—…์ด ์†์‹ค๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํƒ€์ผ HTML ์š”์†Œ๋ฅผ 1 ํ”ฝ์…€ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” ํƒ€์ผ์ด ์•ฝ๊ฐ„ ํ๋ ค์ง์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งค์šฐ ์›์‹œ์  ์ธ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์ง€๋งŒ ์›์‹œ์ ์ด๋ผ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ 100 % ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋งต ์ฐฝ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ํƒ€์ผ ๋ ˆ์ด์–ด๋ฅผ ๋‘ ๋ฒˆ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ์ฐฝ ์•„๋ž˜์— ๋ฐฐ์น˜๋˜๊ณ  ์˜คํ”„์…‹ [-1, -1]์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<style>
  .originOffset {
    transform: translate(-1px, -1px);
  }
</style>

<script>
  var pane1 = map.createPane('pane1');
  var pane2 = map.createPane('pane2');

  pane1.style.zIndex = 210;
  pane2.style.zIndex = 220;

  L.DomUtil.addClass(pane1, 'originOffset');

  var layer1 = L.tileLayer( ... , {
    pane: 'pane1',
    ...
  });
  var layer2 = L.tileLayer( ... , {
    pane: 'pane2,
    ...
  });
  var layer = L.layerGroup([layer1, layer2]);
</script>

@cmulders ์ œ์•ˆ์—์„œ์ด ์ค„์— ๊ด‘๊ณ ๊ฐ€ ์žˆ๊ณ  ํƒ€์ผ ์‚ฌ์ด์— ๋” ์ด์ƒ ๊ณต๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค.

map.on ( 'zoomend drag', function () {
$ ( '# map> div.leaflet-pane.leaflet-map-pane> div.leaflet-pane.leaflet-tile-pane> div> div> img'). each (function () {
if (String ($ (this) .css ( "width")). includes ( '. 5') === false) {
var imgW = String ($ (this) .css ( "width")). split ( "px") .join ( ".5")
var imgH = String ($ (this) .css ( "height")). split ( "px") .join ( ".5")
$ (this) .css ( "width", imgW);
$ (this) .css ( "height", imgH);
}
});

๋‚˜๋Š” @mdorda๋ฅผ ์‚ฌ์šฉ ํ•˜๊ณ  leaflet-map-pane ์˜ translate3d() ํ˜ธ์ถœ์—์„œ ํ”ฝ์…€์˜ ๋ถ„์ˆ˜ ๋Œ€์‹ ์— ์ •์ˆ˜๊ฐ€ ๋‚˜์˜จ ๋‹ค์Œ (๋ธ”๋ผ์ธ๋”๊ฐ€ ์ผœ์ง„ ์ƒํƒœ์—์„œ) ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์•„๋ฆ„๋‹ต์Šต๋‹ˆ๋‹ค. ๋ถ„์ˆ˜๋ฅผ ๋ณด๊ด€ํ•ด์•ผ ํ•  ๋•Œ์˜ ๋ชจ๋“  ๋‰˜์•™์Šค๋ฅผ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Leaflet์ด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฌธ์ œ์—์„œ ์•ฝ๊ฐ„์˜ ์™„ํ™”๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด ๋ฐ”๋‹ฅ์— L.Draggable._onMove ๋„ฃ์–ด๋„ ๊ดœ์ฐฎ์„๊นŒ์š”?

    offset.x = Math.floor(offset.x / this._parentScale.x);
    offset.y = Math.floor(offset.y / this._parentScale.y);

๋˜๋Š” L.DomUtils.setTransform

    pos.x = Math.floor(pos.x);
    pos.y = Math.floor(pos.y);

๊ทธ๋ž˜์„œ ๋ฒˆ์—ญ์—๋Š” ๋ถ„์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์ง€๋งŒ ํƒ€์ผ ์ด๋ฏธ์ง€๋Š” ๋ถ„์ˆ˜ ๋ฒˆ์—ญ์ด๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋‚ญ๋น„ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋งž์Šต๋‹ˆ๊นŒ?).

๋‚ด ๋ธŒ๋ผ์šฐ์ € ์„ค์ •์ด ์‹ค์ œ ํฌ๊ธฐ๊ฐ€ ์•„๋‹Œ ํ™•๋Œ€ ๋œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์‹œ ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€์„œ ๋ชจ๋‘ ๋งค๋ ฅ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ธŒ๋ผ์šฐ์ € ์„ค์ •์ด ์‹ค์ œ ํฌ๊ธฐ๊ฐ€ ์•„๋‹Œ ํ™•๋Œ€ ๋œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์‹œ ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€์„œ ๋ชจ๋‘ ๋งค๋ ฅ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

@tokenflow :์ด ์ฃผ์ œ๋Š” ๋ง ๊ทธ๋Œ€๋กœ 'Webkit ๋ธŒ๋ผ์šฐ์ €์˜ ๋ถ€๋ถ„ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€ ์—์„œ ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„'์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ •๋ง ์ž๋งŒํ•˜์ง€ ์•Š์œผ๋ ค ๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ 100 % ํ™•๋Œ€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์œ ์šฉํ•œ ๊ธฐ์—ฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

Firefox์™€ Chromium์˜ Linux ๋ฒ„์ „์—์„œ์ด ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” (์ ์–ด๋„ Firefox์˜ ๊ฒฝ์šฐ) document.querySelector('.leaflet-tile-container:last-of-type').getAttribute('style') ๋กœ ์ฐพ์„ ์ˆ˜์žˆ๋Š” ์ฃผ์š” .leaflet-tile-container ์˜ scale() ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์˜ˆ. scale(0.707107) ์ด์ง€๋งŒ ๋ชจ๋“  img ์ž์‹์€ ๋„ˆ๋น„ / ๋†’์ด 256์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ„์‚ฐ : 0.707107 * 256px = 181.019392px , ์ด๊ฒƒ์€ ์‹ญ์ง„์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”ฝ์…€์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ๋ฐฐ์œจ๋กœ ์ทจํ•˜๋ฉด Firefox / Linux์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค : 181px / 256px = 0.70703125 .

๋””๋ฒ„๊ทธ์— ๋„์›€์ด๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

function getCurrentScale (doFix = false) {
    const tileContainer = document.querySelector('.leaflet-tile-container:last-of-type');

    if (!tileContainer) {
        return;
    }

    const tileStyle = tileContainer.getAttribute('style');
    const scaleRegEx = /scale\(([0-9\.]+)\)/i;
    const matches = scaleRegEx.exec(tileStyle);

    if (!matches || matches.length !== 2) {
        return;
    }

    const scale = parseFloat(matches[1]);

    const mod = (scale * 256) % 1;

    if (mod) {
        console.log('scale is off by px:', mod);
        if (doFix) {
            const newScale = Math.round(scale * 256) / 256;
            console.log('old scale / new scale', scale, newScale);
            const newStyle = tileStyle.replace(scaleRegEx, `scale(${newScale})`);
            tileContainer.setAttribute('style', newStyle);
        }
    } else {
        console.log('scale seems to be fine:', scale);
    }
}

์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ true ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์Šค์ผ€์ผ ๊ณ ์ •์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด Firefox์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋ฆฌ ์„๊ณ  ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

.leaflet-tile-container img {
    width: 256.5px !important;
    height: 256.5px !important;
}

์ด๋กœ ์ธํ•ด ํƒ€์ผ ์ฃผ๋ณ€์— ์—„์ฒญ๋‚œ ์ด์Œ์ƒˆ๊ฐ€ ์ƒ๊ธฐ์ง€ ๋งŒ ์ „ํ˜€ ๋ณผ ์ˆ˜ ์—†์œผ๋ฉฐ ํƒ€์ผ ์‚ฌ์ด์˜ ๊ณต๊ฐ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

@ ChrisLowe-Takor๋Š” ์–ธ๋œป๋ณด๊ธฐ์—๋Š” ์‹ค์ œ๋กœ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๋“  ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ง€๊ธˆ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” JavaScript ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ์ข‹์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ข€ ๋” ์กฐ์‚ฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ ChrisLowe-Takor-์™€์šฐ, ๋‚˜์—๊ฒŒ๋„ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค! ์ข‹์€ ์ฐพ๊ธฐ ๐Ÿ‘

@ ChrisLowe-Takor ๋˜ํ•œ Leaflet-package๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ R์—์„œ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@ ChrisLowe-Takor ์–ด์จŒ๋“ ์ด ํŠธ๋ฆญ์€ ๋ชจ๋“  ์–ด๋ฆฌ์„์€ ํ˜„๋Œ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค (์˜ค๋ž˜๋œ ์˜ค๋ž˜๋œ IE11์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)! ํ•œ ๊ฐ€์ง€ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. detectRetina ์˜ต์…˜์ด ํƒ€์ผ ๋ ˆ์ด์–ด์— ์‚ฌ์šฉ๋˜๊ณ  ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ๋ ˆํ‹ฐ ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด ์ธ ๊ฒฝ์šฐ ํƒ€์ผ ํฌ๊ธฐ๋Š” 125 x 125 ํ”ฝ์…€์ด๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜์ด ์†”๋ฃจ์…˜์—๋Š” ํƒ€์ผ ์ปจํ…Œ์ด๋„ˆ ํ™•์žฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ๋ชจ๋“  ์†”๋ฃจ์…˜๊ณผ ๋™์ผํ•œ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ผ์ด ์•ฝ๊ฐ„ ํ๋ ค์ง‘๋‹ˆ๋‹ค.

@ ChrisLowe-Takor ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋‹ค. maxZoom์ด maxNativeZoom๋ณด๋‹ค ํฌ๋ฉด ํƒ€์ผ์ด ์ œ๋Œ€๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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