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

私が発芋したこずの1぀は、テクスチャをクランプする必芁があるずいうこずです。 ぀たり、この行が削陀された堎合 https 

今のずころ、タむルレむダヌの䞉角圢はスラむバヌなしでレンダリングされる完党なメッシュを圢成しおいたす...しかし、「実隓的」ずいう蚀葉は圓分の間そのすべおになりたす。

@mourner Safariでより匷力な効果がありたすが、Chromeでも衚瀺されたす。
screen shot 2015-06-30 at 15 42 07

@IvanSanchezすばらしい仕事ですが、ただそれを䜿甚できるずは思いたせん。

@Eschonええ、Retina画面ではさらに目立たないので、おそらく気づかなかったでしょう。

これはFirefoxにも圱響を䞎える堎合がありたす。
jsFiddleでは再珟できたせんでしたが、そのサむトを芋るず
Firefox39ず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のバギヌ、FFOKです。

これに぀いおは、リヌフレットなしのChromeバグレポヌトを䜜成する必芁があるため、将来のChromeバヌゞョンで修正されたす。

@hyperknot Chromeのバグレポヌトはすでにあるず思いたすが、今は芋぀かりたせん。

私はleafletjs1.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 ElCapitanのSafari9.1で、問題を解決するcssの回避策を芋぀けたした。

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

私はあたり信甚できたせんが、これが圹立぀_理由_を瀺唆する次のStackoverflowの回答からそれを取りたした http //stackoverflow.com/a/17822836/138103

ボックスシャドりを䜿甚するず、問題がより盎接的に解決されたす。ボックスの再描画寞法が拡匵され、WebKitに䜙分なピクセルの再描画が匷制されたす。 モバむルブラりザでのボックスシャドりの既知のパフォヌマンスぞの圱響は、䜿甚されるブラヌ半埄に盎接関係しおいるため、1ピクセルのシャドりはほずんどたたはたったく効果がないはずです。

おそらくこれは適切な修正ずしお䜿甚できたすが、他の人が最初にこれを詊した方がよいでしょう。 しかし、それは私にずっおはうたくいき、他のブラりザでは問題を匕き起こさないようです。

@hrefたぶん、その修正でプルリク゚ストを行うこずができたすか これにより、テストが簡単になりたす。

@href @IvanSanchezこれがレンダリングパフォヌマンスに圱響しないず確信しおいたすか アルファ䞍透明床のボックスシャドりを远加するず、モバむルデバむスにどのように圱響するかをプロファむルする必芁があるず思いたす。たずえば、パフォヌマンスに目に芋える圱響を䞎えたり、ハヌドりェアアクセラレヌションを無効にしたりする可胜性がありたす。

@IvanSanchezが完了したした。

これがレンダリングパフォヌマンスに圱響を䞎えないこずを確認したすか たずえば、アルファ䞍透明床のボックスシャドりを远加するず、モバむルデバむスにどのように圱響するかをプロファむルする必芁があるず思いたす。たずえば、パフォヌマンスに目に芋える圱響を䞎えたり、パンのハヌドりェアアクセラレヌションを無効にしたりする可胜性がありたす。

これがどのような圱響を䞎えるのか、たったくわかりたせん。 Stackoverflowの回答から、これは効果がないようですが、接線方向に関連する問題に関する他の誰かの意芋を信頌しおいるだけです。 もっず知識のある人がそれを調べお私の回避策を玹介できれば、きっず玠晎らしいアむデアでしょう。

グヌグルで怜玢しおラッキヌになり、他の人に知っおもらいたかった。

@hyperknot @href数週間以内に、テストブラりザのセットに察しおいく぀かのベンチマヌクを実行したす。

@IvanSanchez @hrefたた、このハッキングを、グロヌバルに適甚するだけでなく、圱響を受けるブラりザのみに制限するこずをお勧めしたす。

@IvanSanchezリヌフレットのレンダリングパフォヌマンスをプロファむリングするための掚奚ワヌクフロヌはありたすか

たた、このハッキングをグロヌバルに適甚するだけでなく、圱響を受けるブラりザのみに限定するこずをお勧めしたす。

個人的にはSafariでしか芋ないので、サファリに限定するのが理にかなっおいたす。 しかし、Chromeでこれを芋おいる人々の蚀及がありたした。 誰かが他のWebkitブラりザでこのバグをただ芋おいたすか

L.Mapコンストラクタヌで、遞択したブラりザヌのみのCSSクラスをマップに远加するのは非垞に簡単です。

@hrefこの問題は私のChromium49にありたす

@hyperknot私はこれらの皮類のものを

@hrefたた、この修正により、Chromium49のタむルが.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 

リヌフレットのないバグをWebkitチヌムずBlinkチヌムに提出したす。

OK、問題を再珟する最小限のリヌフレットなしの䟋を䜜成するこずに成功したした。
http://playground-leaflet.rhcloud.com/say/1/edit?html、output

提出されたChromiumバグレポヌト https 

提出されたWebkitバグ https 

img-lessバヌゞョン http 

[email protected]からのChromiumバグレポヌトからの

ちょっずあなたたちに簡単な曎新を提䟛したいだけです。 私はこの問題に積極的に取り組んでいたす。

問題は、芁玠のロヌカル空間で物事をラスタヌするこずが原因でした。 芁玠に分数倉換がある堎合、ラスタラむズされたテクスチャは、線圢リサンプリングを䜿甚した分数倉換で画面に貌り付けられ、結果ずしおがやけたす。

解決策は、物理画面にピクセル敎列された空間で物事をラスタヌ化するこずです。 ぀たり、ラスタヌテクスチャの代わりに、分数倉換をベクタヌグラフィックスコマンドに適甚したす。

修正は2぀の郚分で行われたす。

  1. ラスタヌシステムが任意の䞀般的な行列でラスタヌできるようにする最初の郚分。 この郚分はほが完了しおいたす。 WIPを䜿甚しおいたすが、パフォヌマンスの䜎䞋を匕き起こすバグがただありたす。 数日で完成する予定です。
    https://codereview.chromium.org/2075873002/
  2. タむリング管理で、さたざたなラスタヌ倉換に付属する䞀連のテクスチャを管理できるようにする2番目の郚分。 私はもずもず䞀般的なマトリックスを䜿甚しおいたしたが、タむルカバレッゞの蚈算が非垞に困難になるこずがわかりたした。 代わりに、倉換ずスケヌリングのみをサポヌトするより単玔なバヌゞョンを実行したす。 これにはもう1週間の䜜業が必芁になるず思いたす。

M53ブランチで着陞しようず思いたすが、時間がき぀いです。 これはM54で修正できるこずは間違いありたせん。

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

バグレポヌタヌぞ

アップロヌドしたテストケヌスは、ピクセルスナップを別の方法で凊理したChromiumの゚ッゞケヌスをトリガヌしたした。 タむルにコンテンツを远加するず、背景に継ぎ目が衚瀺されなくなりたす。 ゚ッゞケヌスは簡単に修正できたすが、タむルの内容に継ぎ目が残っおいる可胜性がありたす。

これは難しい問題であり、唯䞀知られおいる完璧な解決策はFSAAを䜿甚するこずです。これは、CPU /メモリのコストのためにブラりザでは䜿甚できたせん。 すべおのベンダヌは、䞀郚のコンテンツが正しく芋えないずいう犠牲を払っお、䞀郚のコンテンツをより芋栄えよくするために独自のヒュヌリスティックを開発しおいたす。

䟋 http 

Chromeは正しいゞオメトリで描画したすが、゚ッゞは詰たった豚のようににじみたす。
Firefoxは、最初のボックスを49x49ずしお描画し、2番目のボックスを49x50ずしお描画したす。
Edgeは、最初のボックスを50x50ずしお描画し、2番目のボックスを50x49ずしお描画したす。 䞡方ずも゚むリアシングあり。

たた、コンテナに回転を远加するず、すべおの実装が゚ッゞをブリヌドしたす。

私が掚奚する回避策は、タむル間にオヌバヌラップを远加するこずです。 A4の玙でポスタヌを䜜るのず同じです。 アむデアは、すべおのスケヌリング埌に各タむルが少なくずも1ピクセルをオヌバヌドロヌするこずを確認するこずです。これにより、各物理ピクセルが少なくずも1぀の䞍透明ピクセルで芆われるこずが保蚌されたす。 重なりの幅は、サポヌトする最小のスケヌルによっお異なりたす。 たずえば、1/4サむズたでサポヌトする堎合は、4ピクセルのオヌバヌラップを远加したす。

以䞋は、これに取り組みたい他の開発者のための詳现な分析です。

レポヌタヌによっおアップロヌドされた再珟は、ccで最適化されたコヌドパスをトリガヌするため、あたり良い再珟ではありたせんでした。 レむダヌが完党に単色であるこずが怜出されるず、コンテンツスケヌルの抂念を持たないSolidColorLayerImplずしお描画したす。 これが簡略化された再珟です http 

ブラックボックスは、サむズ100、100のSolidColorLayerImplずしお描画され、サむズ100、100の単䞀の単色クワッドを生成したす。これは描画倉換によっお画面に投圱されお99.5、99.5になりたす。 アンチ゚むリアスを䜿甚するず、ピクセルの右端の列ず䞀番䞋の行が半透明で描画されたす。

䞀方、レむダヌに䜕かを远加しおccをだたし、レむダヌが単色ではないず思わせる堎合、問題は2぀の堎合に発生したす。

  1. 最埌のタむルは単色です。䟋 http 

内容のサむズは切り䞊げられるため、スケヌリングされたレむダヌサむズは600、300* 0.995 =597、298.5のみですが、597、299ずしお䞊曞きされたす。

  1. リストタむルが単色ではない堎合、䟋 http 

内容のサむズは切り䞊げられたす。 ここでも、実際のスケヌリングされたコンテンツは600、300* 0.995 =597、298.5のみをカバヌし、生成されたクワッドは597,299をカバヌしたす。 ピクセルの最埌の行は、アンチ゚むリアスのために半透明であるず想定されおいたすが、実際には、レむダヌを䜜成した芁玠の背景色であるレむダヌの背景色で塗り぀ぶしおいたす。

背景に継ぎ目はありたせんが、コンテンツがそれを芆うこずになっおいるずきに、背景が゚ッゞでにじむ可胜性がありたす。 䟋 http 

非単色タむルを䜿甚した他のテストケヌス
http://playground-leaflet.rhcloud.com/giqo/edit?output

@hyperknotの玠晎らしいアップデヌトですが、これら2぀の匕甚笊は互いに矛盟しおいるようです1぀は修正に取り組んでいるず蚀い、次の匕甚は適切な修正が䞍可胜だず蚀っおいたす。 それで、私たちは修正を埅぀のでしょうか、それずもそれが氞遠にこのようになるこずを受け入れるのでしょうか

@mourner申し蚳ありたせんが、完党なコンテキストは含たれおいたせん。もちろん、その通りです。 したがっお、元のバグレポヌトは次のずおりです。
https://bugs.chromium.org/p/chromium/issues/detail?id=600120

ある時点で、それは別の問題に統合されたした
https://bugs.chromium.org/p/chromium/issues/detail?id=521364

その別の問題では、解決策を含む元の長い返信を受け取りたした。 私は圌がリヌフレットのケヌスが圌の仕事によっお本圓に修正されおいるかどうかを確認できるかどうか尋ねたした、そしお圌は答えたした

リヌフレットの問題は実際には別の問題であるず申し蚳ありたせん。 600120号を再床開き、分析を共有したす。

そのため、Leafletバグが再開され、Leafletバグ1で2番目の応答が返されたした。 ずころで、珟圚の最新のアップデヌトは次のずおりです。

私はモバむルグヌグルマップを芋お、圌らがそれをどのように扱ったかを芋たした。 圌らもこの問題に悩たされおいるこずがわかりたしたが、圌らはそれを目立たなくするためにいく぀かのUIトリックを行いたした。

たず、ビュヌポヌトタグを䜿甚しおブラりザのピンチズヌムを犁止し、JSにピンチズヌムを実装したした。 ピンチズヌム䞭も、タむル間の継ぎ目を確認できたす高解像床ディスプレむでは非垞に埮劙です。 ズヌムゞェスチャが終了するず、スケヌル係数を最も近いタむルセットにスナップしたす。 したがっお、基本的にタむルは、ズヌムゞェスチャ䞭を陀いお、垞にネむティブ解像床で衚瀺されたす。

正盎なずころ、ただしっかりした蚈画はありたせん。 月曜日に他の絵の具の人たちず話し合う぀もりです。

ずころで、モバむルグヌグルマップ私はりェブサむトのものだず思いたすは私たちずたったく同じ技術を䜿甚しおいるようです。

@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から始めお、倉曎したす倉換詳现に぀いおは、https//groups.google.com/a/chromium.org/forum/#topic / blink-dev / Ufwrhx_iZ7Uを参照しおください
  • 最初のラスタヌパスの埌で、レむダヌスケヌルを目的の倀にリセットしたす

䟋http 

chrishtr / danakjレむダヌラスタヌスケヌルのセマンティクスを正しく取埗したしたかレむダヌラスタヌ化スケヌルを特定の倀にロックするためのより良い方法はありたすか

あなたはそれに答えるのを手䌝っおもらえたすか

修正が進行䞭であるこずは知っおいたすがそれを掚し進めおくれおありがずう、それたでの間... @ cmuldersのモンキヌパッチが最適です。 これは、Leafletをnpmモゞュヌルずしお取り蟌み、ES6を䜿甚し、誰かがコピヌパスタの良さを探しおいる堎合に備えお、二重パッチがないこずを保蚌するバヌゞョンです。

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;

}

人々がこれを調べおくれおうれしいです。 理想的ずは蚀えない回避策ずしお誰かに圹立぀堎合慣性を犠牲にする堎合は、マップのinitにintertia:falseを蚭定するず、ギャップがなくなり、堎合によっおはzoomAnimation:false

私はこれに察する過床に耇雑な解決策を芋぀けたず思いたす、私はそれをhttps://github.com/Leaflet/Leaflet.TileLayer.NoGapに茉せたした-パフォヌマンスがわからないのでコメントは倧歓迎です叀いコンピュヌタ/電話でそのこずの。

cc @Eschon @hyperknot

ずころで、このバグは、高DPI2560x1140画面でChromeを䜿甚しおいるずきにも発生したす。リヌフレットの分数ズヌムや、ブラりザヌのズヌムを䜿甚する必芁はありたせん。

返事が遅れお申し蚳ありたせん。

私はあなたの゜リュヌションをテストしたした。 デモはうたく機胜したので、アプリケヌションに修正を远加しようずしたした。 私はただ叀い1.0-devバヌゞョンのLeafletを䜿甚しおいたので、 http //leafletjs.com/download.htmlから1.0.0-rc3に曎新したした。

私が最初に気付いたのは、ここに゚ラヌがあるようだずいうこずthis._mapに倉曎したした。

その埌は動䜜したしたが、私の仕事甚コンピュヌタでは本圓に遅いです。 特にChromeでは、Firefoxも遅かった。

驚いたこずに、私がテストした電話にはそれほど倧きな圱響はありたせんでした。
Android䞊のFirefoxは以前ず同じように芋えたすが、Chromeは少し遅いですが、それほど悪くはありたせん。
iOSのSafariも以前ずほが同じようです。

私が気付いたもう䞀぀の奇劙なこずは、モバむルChromeずSafariではピンチズヌムが固定レベルにスナップしおいるように芋えるこずです

@Eschonこれをテストしおくれおありがずう

私はい぀もmap代わりにthis._map mapを入力するのを間違えたす:-(

その埌は動䜜したしたが、私の仕事甚コンピュヌタでは本圓に遅いです。 特にChromeでは、Firefoxも遅かった。

そのコンピュヌタヌでプロファむラヌを実行できたすか 速床䜎䞋がキャンバス操䜜に関連しおいるかどうかを知っおおくず䟿利です。 IE9-IE11ではパフォヌマンスが少し䜎䞋しおいるこずに気づきたした。

この゜リュヌションによっお䞀郚のプラットフォヌムでマップが遅くなるかどうかに基づいお、完党にオプションにし、デフォルトでオフにするこずが理にかなっおいる堎合がありたす。 ここでのいく぀かのフィヌドバックは重芁です

OL3の人々がこの問題をどのように解決するか、たたはキャンバス合成を有効にする前にブラりザヌでパフォヌマンス怜出を行うかどうかに぀いおは、実際には調べおいたせん。 䞀芋の䟡倀があるかもしれたせん。

私が気付いたもう䞀぀の奇劙なこずは、モバむルChromeずSafariではピンチズヌムが固定レベルにスナップしおいるように芋えるこずです

それはzoomDeltaずzoomSnapオプションをいじっおいるだけで、このバグずは関係がないに違いありたせん。

そのコンピュヌタヌでプロファむラヌを実行できたすか 速床䜎䞋がキャンバス操䜜に関連しおいるかどうかを知っおおくず䟿利です。 IE9-IE11ではパフォヌマンスが少し䜎䞋しおいるこずに気づきたした。

Chromedev-toolsを䜿甚しおJavaScriptCPUプロファむルを蚘録する必芁がありたすか 私はそのパフォヌマンステストに関する経隓があたりないので、それが瀺すデヌタをどうすればよいのかよくわかりたせん。

ええ、それが問題です。 次に、フレヌムチャヌトで幅広いものを探したす。

修正を加えたプロファむルず修正を加えおいないプロファむルを䜜成したした。 私は䞡方のプロファむルでほが同じこずをしようずしたした。

修正されたバヌゞョンに_onZoomTransitionEndが原因で远加の「ピヌク」これが正しい単語かどうかはわかりたせんがあるこずに最初に気づきたした

修正なしのバヌゞョンでは、 _onZoomTransitionEndは1.8ミリ秒かかり、グラフにも衚瀺されたせんでした。 修正されたバヌゞョンでは、6ミリ秒かかり、アクティビティの「ピヌク」が発生したした。

他の2぀の「ピヌク」は、2぀のプロファむルで非垞によく䌌おいたすが、少し異なるように芋えたすが、修正されたバヌゞョンでは、それらの間のギャップが倧きくなっおいたす。

それがなんずかお圹に立おば幞いです。 たた、2぀のプロファむルを保存したので、必芁に応じおどこかにアップロヌドできたす。

ずりあえず、汚い回避策ずしお、元の関数に.002のスケヌル係数を远加しお、各タむルにtranslate3dプロパティを蚭定し、ギャップをほが完党に排陀したす。 「.002」は、ギャップを完党になくすためのテストケヌスで最も䜎い倍率でした。 副䜜甚はありたせんでした。

最新のChrome、Firefox、IE11でテスト枈み。ブラりザ内のさたざたなズヌム倀でりィンドりスケヌリングを150に蚭定した40むンチ4kモニタヌでテスト枈み。

このバグの進展はありたすか @AlexanderUhlあなたの゜リュヌションは、配眮されたずきに画像の倉曎を匕き起こしたすか、それずも移動/ズヌム䞭にのみ圱響を受けたすか

この問題を解決するためにwill-change CSSプロパティが远加されたようです。ここで説明されおいるように、FFパフォヌマンス譊告を確認するだけで枈みたす https 

@themre scaleプロパティは、远加されるずすべおの画像タむルに適甚され、氞続的になりたす。 スタむル属性は次のようになりたす。
style="width: 256px; height: 256px; transform: translate3d(545px, 745px, 0px) scale(1.002); opacity: 1;"

しかし、それは画像を少し匕き䌞ばすこずになり、それは望たしくない効果です。 will-change CSSプロパティを持぀1.0.3バヌゞョンを詊したしたが、それでもホワむトギャップが発生したす。 もう少し芋おみたす。

倚くの堎合、それはimgを拡匵したす、それがアプロヌチです;-)この回避策は理想的ではないこずに同意したすが、通垞は回避策の性質であるtbhではありたせんか それにもかかわらず、このアプロヌチは、ごくわずかな副䜜甚で私にずっお最適に機胜したすmapbox、ここ、osmなどからのタむルを䜿甚したマッピングアプリケヌションである私のナヌスケヌスの堎合

通垞のtranslateを䜿甚するず、問題は解決したす。 translate3d CSSプロパティが通垞の倉換よりもはるかに高速かどうかはよくわかりたせん。おそらく、このフラグをオプションずしお远加するのが最善でしょう。translate3dをtr​​anslateに眮き換える぀もりだず思いたす。

動䜜䞭のビュヌ
translatemap

image
最新バヌゞョン1.0.3で同じ問題に盎面しおいたす。

1.1で修正される可胜性がありたす

2017月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 

これに噛たれた。 私にずっおは、ChromiumやFireFoxには存圚しないようです。 Safariのフラクショナルズヌムのほんの䞀郚です。

進捗

この問題は、ChromeずFirefoxMacでも匕き続き発生したす。 0.25のzoomDeltaずzoomSnapを䜿甚しおいたす。

奇劙なこずに、 .leaflet-tile { will-change: auto !important; } たたは「未蚭定」を蚭定するず、Firefoxのみの問題が修正されたす。 Chromeの回避策をただ探しおいたす。

慣性を無効にし、translate3dコヌドを倉曎しお䞞めを远加するために提案された他の修正も機胜したせんでした。

@jawinn L_DISABLE_3Dをtrueに蚭定するず、成功する可胜性があるず思いたす。IIRCは、 will-changeを倉曎するのずほが同じ効果がありたす。぀たり、レンダリング時にハヌドりェアアクセラレヌションが削陀されたす。地図。 ズヌムアニメヌションやパンなどのパフォヌマンスが倧幅に䜎䞋する可胜性があるこずに泚意しおください。

これらはすべおブラりザの実装の詳现に非垞に敏感なので、これを䞀粒の塩で考えおみおください。私がこれを調べおからかなり時間がかかりたした。

@jawinn
私が䜿甚する回避策は、䞊蚘のものです。

/* 
 * 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修正」を䜿甚する堎合は、画像ががやけお少し壊れるこずに備えおください。

  • 比范1 https 
  • 比范2 https 

元の画像のレンダリングずフォトショッピングに䜕時間も費やした私にずっお、これは受け入れられたせんでした。 そのため、 L_DISABLE_3D = trueを䜿甚しお、アニメヌションのちら぀きずゞャンプするズヌムに耐えなければなり

詳现 leaflet-rastercoordsプラグむンを䜿甚しおおり、マップ蚭定は次のずおりです。

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

Qそのような「タむル間のスペヌス」バグがないLeafletの次善の代替案は䜕ですか

私はそれを自分でグヌグルしたす、しかし倚分誰かがすでにこの道を進んだでしょう。

@ 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では効果が芋られたせん。 回避策をありがずう

ここでも同じですWindows 7 Enterprise SP1。 Firefoxではあちこちに線があり、Chromeでは完党な線グリッドですが、IE11では問題ありたせん。 @cmuldersの修正はFirefoxずChromeで機胜したす。

さらにいく぀かのテストの完党な結果を次に瀺したす。

  • Windows 7 Enterprise SP1

    • IE11わかりたした

    • Chrome、Firefox OKではありたせん

  • りィンドりズ10

    • IE11、Edge、FirefoxOK

    • Chrome OKではありたせん

  • マックOS

    • Safari、Chrome、FirefoxOK

  • Linux

    • Chrome、FirefoxOK

  • アンドロむド

    • Chrome、FirefoxOK

    • WebViewを䜿甚するアプリOK

さらなるテストにより、これは明らかに非垞に䜎レベルの問題であり、Leafletずは関係がないこずが瀺されたした。
Windows 7 Enterprise SP1でのテストは、最初は2台の異なるPCで行われたしたが、どちらもNVIDIAグラフィックスを䜿甚しおいたした。

AMDRadeonグラフィックスを搭茉したWindows7 Enterprise SP1で同じテストを行ったずころ、問題はなく、ChromeたたはFirefoxのタむル間に線はありたせんでした。

NoGapに぀いおは前に説明したように、元のコヌドを取埗しお、珟圚のリヌフレットバヌゞョンリヌフレット^ 1.3.3で機胜するように倉曎したこずをお知らせしたいず思いたす。
https://github.com/Endebert/squadmc/blob/master/src/assets/Leaflet_extensions/NoGapTileLayer.js

その埌、通垞のTileLayerのように䜿甚できたす //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のように䜿甚できたす //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); try ... catchを远加するこずです
そしおそれは助けにはならなかった。

@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でうたく機胜するのはそのためです。

解決

10進ピクセルを蚱可しないでください。 これは、たずえば次の方法で実珟できたす。

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

  • たたは倚くのそしお倚くの他の解決策によっお...

さお、これが2時間の調査の結果です。 この問題は、 translate3d内のピクセルの小数が原因で発生したす。

今日は2019幎であり、 translate3dを䜿甚しお最新のブラりザヌでGPUを匷制的に䜿甚するこずはかなり時代遅れだず思いたす。 お疲れ様でした@mdorda

@mdordaこんにちは 面癜そうに聞こえたすが、䞞めに぀いおはこのスレッドで以前に説明したこずがありたす https 

それ以降に重芁な倉曎があったかどうかはわかりたせんが、培底的なテストを行うたでは期埅が持おたせん。

これを解決するための最初のステップは、これをテストできるように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 Pro1903のLeafletJSバヌゞョン1.5.1の分数ズヌムで芋られたす。
ピクセルギャップ
ピクセルギャップの理由は、translate3dCSS関数ではなく、scaleにあるず思いたす。
image
バヌゞョン1.5.1では、私が芋るように、translate3dパラメヌタヌは敎数のみです。


よろしくお願いいたしたす。IMMSPgisgroup

このバグの解決策を芋぀けたしたか

この瞬間に同じ問題が発生し、解決策が芋぀かりたせんでした。

error

私は䜿甚しおいたす

  • Windows 10 Home 1803
  • GoogleChromeVersión77.0.3865.90公匏ビルド64ビット
  • リヌフレット1.5.1

Firefoxを䜿甚するず、癜い線が衚瀺されたせん

no_error

@ Arenivar93

Na私はここ数幎これに目を向けおきたした。 圌らはいく぀かの回避策を詊したしたが、倧きな劥協なしにそれを修正するために䜕も機胜したせんでした。 問題の根本はクロムの䞊流にありたす //bugs.chromium.org/p/chromium/issues/detailid = 600120

クロムチヌムからの最新のメッセヌゞは、他のものを壊さずに行うのは難しすぎるので、しばらくの間それで立ち埀生するかもしれないずいうこずです。

特に暗い地図や画像私の堎合では、この問題は非垞に顕著です。 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゜リュヌションをどこにどのように実装したすか

異なる可胜性があるため、reactアプリを䜜成しおいたすが、次の内容のファむルを䜜成したした。

// 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';

私の回避策は、゜ヌスコヌドに倉曎を加えずに倉換倀を䞞めるこずです。
reactで䜿甚したすが、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はれロに蚭定できたす。 これは、リヌフレットがズヌムレベルをスナップしないこずを意味したす。

゜リュヌションが完党な敎数のデフォルトスナップを超えお凊理できないずいう分数の状態になっおいるず思いたす🀷‍♂しかし、確かではありたせん

リヌフレット1.7-devでも、問題は解決したせん。 FirefoxずWindows7およびWindows10のChromeのタむルの境界線。IE11および叀いクロヌム以倖のEdgeでは問題ありたせん。新しいChromeベヌスのEdgeでも同じ問題が発生したす。

実甚的な解決策は2぀ありたすが、どれも奜きではありたせん。 1぀は<script>L_DISABLE_3D = true;</script>で3dを無効にするこずですが、これはアニメヌション操䜜を倱うこずを意味したす。 もう1぀は、タむルのHTML芁玠を1ピクセル拡匵するこずですが、これは、タむルがわずかにがやけるこずを意味したす。

私は非垞に原始的な解決策を芋぀けたしたが、原始的であるずいう性質䞊、100機胜したす。 倚分誰かがそれが圹に立぀ず思うでしょう。

解決策は、同じ問題のあるタむルレむダヌを2぀の異なるマップペむンに2回衚瀺し、䞀方を他方の䞋に配眮し、オフセット[-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 'ズヌム゚ンドドラッグ'、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()の呌び出しで敎数が生成されるず、目隠しをオンにしお問題は解消されたす。そしお、すべおが再び矎しいです。 分数を保持する必芁がある堎合の埮劙な違いをすべお理解しおいるずは蚀いたせんが、ブラりザの問題からリヌフレットにある皋床の救枈が埗られる堎合は、 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);

そのため、分数が䞎えられる翻蚳はありたせんが、タむル画像は分数の翻蚳にはならないので、おそらく無駄になりたす右。

実際のサむズではなく、ブラりザの蚭定が拡倧されたこずを発芋するために2時間を無駄にしたした
ズヌムを実際に戻すだけで、すべおが魅力のように機胜したした。これが私の堎合でした

実際のサむズではなく、ブラりザの蚭定が拡倧されたこずを発芋するために2時間を無駄にしたした
ズヌムを実際に戻すだけで、すべおが魅力のように機胜したした。これが私の堎合でした

@tokenflow このトピックは、文字通り「Webkitブラりザヌの分数ズヌムレベルのタむル間のスペヌス」に関するものです。 私はここで生意気にならないように心がけおいたすが、100にズヌムするこずに関するあなたの情報は、誰かにずっお有益な貢献だず本圓に思いたすか

FirefoxずChromiumの䞡方のLinuxバヌゞョンでこのバグに遭遇したした。
問題は少なくずもFirefoxの堎合、メむンの.leaflet-tile-containerのscale()にあるようです。これは、 document.querySelector('.leaflet-tile-container:last-of-type').getAttribute('style')芋぀けるこずができたした。
䟋 scale(0.707107)がありたすが、すべおのimgの子は幅/高さ256です。したがっお、次のように蚈算したす。 0.707107 * 256px = 181.019392px 、これは10進数です。 次にピクセルを䞞めおスケヌルずしお䜿甚するず、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の堎合は必芁ありたせん 芚えおおくべきこずが1぀だけありたす。オプションdetectRetinaがタむルレむダヌに䜿甚され、ディスプレむがRetinaディスプレむの堎合、タむルサむズは125 x 125pxになりたす。

ただし、この゜リュヌションには、タむルコンテナの拡匵に基づくすべおの゜リュヌションず同じ欠点がありたす。぀たり、タむルが少しがやけたす。

@ ChrisLowe-Takor詊しおみたした。 maxZoomがmaxNativeZoomより倧きい堎合、タむルは正しく衚瀺されたせん。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡