4

openstreetmap タイルの上にいくつかのデータを配置して、基本的なインタラクティブ マップを実装しています。コードは、古典的な d3.geo.tile の例と非常によく似ています: http://bl.ocks.org/mbostock/5342063

ズームとパン中にタイルがちらつくことを除いて、すべてが完全に機能しているようです。この効果は、元の例と、これまでに遭遇した d3.geo.tile の他のすべての使用例でも見られます。この UX バグは、ブラウザーが常にタイルを即座にダウンロードできるとは限らないために発生します。驚くべきことに、特定のタイルがロードされた後でも、その再表示がすぐに行われるとは限りません。ちらつきは時々再発生します。

Leaflet のような滑りやすいマップ ライブラリは、要求されたズーム レベルの準備が整うまで、以前のズーム レベルからキャッシュされたタイルを表示することで、ちらつきを補正しようとします。私の考えでは、d3.geo.tile についても同様のことができればいいと思います。

image.exit()新しいタイルが読み込まれている間、以前に表示されたタイルが画面に表示されたままになる可能性があるという考えで遊んでみました。しかし、残念ながら、何も機能しませんでした。

誰でもこの問題の解決策を提案できますか? ちらつきのないスムーズな D3 マップは、2016 年の世界にふさわしいものです。:–)

UPD

タイルの URL のランダム性を少し下げると、問題が部分的に解決されることがわかります (特定のビューに再度アクセスしたときのちらつきが少なくなります)。

// before
image.enter().append("image")
  .attr("xlink:href", function(d) { return "http://" + ["a", "b", "c"][Math.random() * 3 | 0] + ".tile.openstreetmap.org/" + d[2] + "/" + d[0] + "/" + d[1] + ".png"; })

// after
image.enter().append("image")
  .attr("xlink:href", function(d) { return "http://" + ["a", "b", "c"][ (d[0] + d[1] + d[2]) % 3 ] + ".tile.openstreetmap.org/" + d[2] + "/" + d[0] + "/" + d[1] + ".png"; })

デモ

ただし、これで問題が完全に解決するわけではありません。

4

1 に答える 1

0

背景色をタイルの基本色 (この場合は淡い灰色/紫色) と一致するように変更するだけです。これはもちろんハックですが、迷惑な「ちらつき」効果を取り除くことが保証されています.

私の意見では、ちらつきが白いということです。

于 2018-05-31T06:11:48.160 に答える