์คํฌ๋ฆฐ ์ท์์ ์ ์ ์๋ฏ์ด ํ์ผ ์ฌ์ด์ ์์ ๊ณต๊ฐ์ด ์์ต๋๋ค. ์ด๊ฒ์ Safari, Chrome ๋ฐ Opera์ ๋ถ๋ถ ํ๋ / ์ถ์ ์์ค์์ ๋์๊ฒ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ # 2377์์ ์์ ๋์์ง๋ง ๋์ค์ ๋ ๋์ ์ฑ๋ฅ์ ์ํด 3ccbe5b์์ ์ ๊ฑฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ํ์ธํ๊ธฐ ์ํด ์์ ์ฌํญ์ ๋ค์ ๊ตฌํํ๋ ค๊ณ ์๋ํ์ง๋ง Chrome์ ๋ฌธ์ ๋ ํด๊ฒฐํ์ง ๋ชปํ ๊ฒ์ด ํจ์ฌ ๋๋นด์ต๋๋ค.
๋๊ตฌ๋ ์ง ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ณ ์น ์ ์๋์ง ์์ด๋์ด๊ฐ ์์ต๋๊น? ๋ถ๋ถ ํ๋ / ์ถ์ ์์ค์ ์ฐ๋ฆฌ ์ฑ์ ํ๋ฅญํ ๊ธฐ๋ฅ์ด์ง๋ง์ด ๋ฒ๊ทธ๊ฐ ๋จ์์๋ ํ ์ค์ ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํธ์ง : ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ jsFiddle์ ์ค์ ํ์ต๋๋ค : http://jsfiddle.net/Eschon/pw9jcjus/1/
๋ชฐ๋ผ. :( 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์์๋ ๋ณผ ์ ์์ต๋๋ค.
@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 }
:
img.leaflet-tile.leaflet-tile-loaded { box-shadow: 0 0 1px rgba(0, 0, 0, 0.05); }
:
: 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 ๋ฒ๊ทธ ๋ณด๊ณ ์์ ์ผ๋ถ ์ ๋ฐ์ดํธ
์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ๋ค์๊ฒ ๋น ๋ฅธ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํด ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๋ฌธ์ ๋ ์์์ ๋ก์ปฌ ๊ณต๊ฐ์์ ์ฌ๋ฌผ์ ๋์คํฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์์ ๋ถ๋ถ ๋ณํ์ด ์์ผ๋ฉด ๋์คํฐ ํ ๋ ํ ์ค์ฒ๊ฐ ์ ํ ๋ฆฌ์ํ๋ง์ ์ฌ์ฉํ๋ ๋ถ๋ถ ๋ณํ๊ณผ ํจ๊ป ํ๋ฉด์ ๋ถ์ฌ ์ ธ์ ๋ธ๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํด๊ฒฐ์ฑ ์ ์ค์ ํ๋ฉด์ ํฝ์ ์ ๋ ฌ ๋ ๊ณต๊ฐ์์ ์ฌ๋ฌผ์ ๋์คํฐํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ๋์คํฐ ํ ์ค์ฒ ๋์ ๋ฒกํฐ ๊ทธ๋ํฝ ๋ช ๋ น์ ๋ถ์ ๋ณํ์ ์ ์ฉํฉ๋๋ค.
์์ ์ฌํญ์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ฉ๋๋ค.
- ๋์คํฐ ์์คํ ์ด ๋ชจ๋ ์ผ๋ฐ ๋งคํธ๋ฆญ์ค๋ก ๋์คํฐ ํ ์์๋ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๋๋ค. ์ด ๋ถ๋ถ์ ๊ฑฐ์ ์๋ฃ๋์์ต๋๋ค. WIP๊ฐ ์์ง๋ง ์ฌ์ ํ ์ฑ๋ฅ ํ๊ท๋ฅผ ์ผ์ผํค๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๋ฉฐ์น ๋ด๋ก ๋๋ผ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
https://codereview.chromium.org/2075873002/- ํ์ผ๋ง ๊ด๋ฆฌ๊ฐ ๋ค๋ฅธ ๋์คํฐ ๋ณํ๊ณผ ํจ๊ป ์ ๊ณต๋๋ ํ ์ค์ฒ ์ธํธ๋ฅผ ๊ด๋ฆฌ ํ ์ โโ์๋๋กํ๋ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๋๋ค. ์๋ ์ผ๋ฐ ํ๋ ฌ์ ์ฌ์ฉํ์ง๋ง ํ์ผ ์ ์ฉ ๋ฒ์ ๊ณ์ฐ์ด ๋งค์ฐ ์ด๋ ค์์ก์ต๋๋ค. ๋์ ๋ฒ์ญ๊ณผ ํฌ๊ธฐ ์กฐ์ ๋ง ์ง์ํ๋ ๋ ๊ฐ๋จํ ๋ฒ์ ์ ์์ฑํ๊ฒ ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ ์ผ์ฃผ์ผ์ ์์ ์ด ํ์ํ ๊ฒ์ด๋ผ๊ณ ์ถ์ ํ๋ค.
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๋ฅผ ์์ฌ ๋ ์ด์ด๊ฐ ๋จ์์ด ์๋ ์์์ด๋ผ๊ณ ์๊ฐํ๋๋ก ๋ง๋ค๋ฉด ์ด์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๋ง์ง๋ง ํ์ผ์ ๋จ์์ ๋๋ค. ์ : http://jsbin.com/zexawa/
๋ด์ฉ ํฌ๊ธฐ๋ ๋ฐ์ฌ๋ฆผ๋๋ฏ๋ก ๋ฐฐ์จ ์กฐ์ ๋ ๋ ์ด์ด ํฌ๊ธฐ๋ (600, 300) * 0.995 = (597, 298.5)์ ๋ถ๊ณผํ์ง๋ง (597, 299)๋ก ๊ณผ๋ํ๊ฒ ๊ทธ๋ ค์ง๋๋ค.
- ๋ชฉ๋ก ํ์ผ์ ๋จ์์ด ์๋ ์์์ ๋๋ค. ์ : 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๋ก ๋์ฒด ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ ๋ณด๊ธฐ :
์ต์ ๋ฒ์ (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();
}
});
})()
3 ๋
์ด ์ง๋ ํ์๋์ด ๋ฒ๊ทธ๋ ์ฌ์ ํ Chrome์์ ํด๊ฒฐ๋์ง ์์์ต๋๋ค! Firefox ๋๋ Safari์์ ํจ๊ณผ๊ฐ ๋ณด์ด์ง ์์ต๋๋ค. ์์
ํด์ฃผ์ @cmulders ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ฌ๊ธฐ์์๋ ๋์ผํฉ๋๋ค (Windows 7 Enterprise SP1). Firefox์ ์ฌ๊ธฐ ์ ๊ธฐ ๋ผ์ธ, Chrome์์๋ ์์ ํ ๋ผ์ธ ๊ทธ๋ฆฌ๋, IE11์์๋ ๊ด์ฐฎ์ต๋๋ค. @cmulders fix๋ Firefox ๋ฐ Chrome์์ ์๋ํฉ๋๋ค.
๋ค์์ ๋ช ๊ฐ์ง ์ถ๊ฐ ํ ์คํธ์ ์ ์ฒด ๊ฒฐ๊ณผ์ ๋๋ค.
์ถ๊ฐ ํ
์คํธ๋ ์ด๊ฒ์ด 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
์ ์ ์๋ํ๋ ์ด์ ์
๋๋ค.
์ญ์ง์ ํฝ์ ์ ํ์ฉํ์ง ๋ง์ญ์์ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
translate3d
์ค์ ์ ๋ฐ์ฌ๋ฆผ ์คํ์
```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 () ์ผ ์ ์์ต๋๋ค.
๋ฒ์ 1.5.1์์๋ ๋ด๊ฐ ๋ณผ ์ ์๋ฏ์ด translate3d () ๋งค๊ฐ ๋ณ์๋ ์ ์์
๋๋ค.
๊ฐ์ฌํฉ๋๋ค. IMMSPgisgroup
์ด ๋ฒ๊ทธ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๊น?
์ด ์๊ฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ํด๊ฒฐ์ฑ ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
๋๋ ussing :
Firefox๋ฅผ ์ฌ์ฉํ ๋ ํฐ์ ์ ์ด ๋ํ๋์ง ์์ต๋๋ค.
๋ฟก ๋นต๋จ
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์ผ๋ก ๋ฐ์ ์ ๋จ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์๋ฃจ์
์ ์ฐ๋ฆฌ์๊ฒ ์๋ฒฝํ์ง ๋ชปํ์ง๋ง, ์ฐ๋ฆฌ์ ๊ฐ์ ์ผ๊ด๋ ๋ผ์ธ์ ํ์คํ ์์ต๋๋ค. 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๋ณด๋ค ํฌ๋ฉด ํ์ผ์ด ์ ๋๋ก ํ์๋์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํนํ ์ด๋์ด์ง๋ ๋ ์ด๋ฏธ์ง (์ ๊ฒฝ์ฐ์๋)์์ ๋ฌธ์ ๊ฐ ์๋นํ ๋๋๋ฌ์ง๋๋ค. Ivan์ด ์ธ๊ธํ๋ฏ์ด ๋ธ๋ผ์ฐ์ ์ ์คํฐ ์จ๋ฆฌ์ด์ฑ์ผ๋ก ์ธํด ํ๋ / ์ถ์ ์ค์ _fractional_ ๋ณํ์ผ๋ก ์ธํด ํ์ผ ์ฌ์ด์ ๊ณต๊ฐ์ด ๋ฐ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ ๋์ ์๋ฃจ์ ์ ์ฌ์ฉํ ์์์ ๋๊น์ง์ด ํด๊ฒฐ ๋ฐฉ๋ฒ (๋๋ ํดํน)์ ์ฌ์ฉํ์ฌ ํ์ผ์ 1 ํฝ์ ๋ ํฌ๊ฒ ๋ง๋ค๊ณ ๋ถ์์ฉ์ด 1 ํฝ์ ๋งํผ ๊ฒน์น๋๋กํฉ๋๋ค. ๊ทธ ์ธ์๋ ํ์ผ์ด ์ฝ๊ฐ ํ๋๋๊ณ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ฉ๋๋ค (1px).