私のオンラインマップ、特にスマートフォンのパフォーマンスを向上させるために、アップロード前にできるだけジオデータを準備するMike Bostockの助言に従いますそれはサーバーに(彼のcommand-line cartographyによると)。たとえば、マップをロードするときに、ブラウザの表示を非表示にするのではなく、コマンドラインでTopoJSONデータを通常d3.geoConicEqualArea()
経由で投影しています。事前に投影されたジオメトリvブラウザにそれを実行させる(効率性と柔軟性)
しかし、私はまた、私は、「焼く」スケールまたは事前TopoJSONファイルに値を変換することはできませんを意味し、動的に.scale
、.fitSize
、.fitExtent
と.translate
のようなメソッドを使用します。
Bostock recommendsd3.geoTransform()
を投影のプロキシとして使用すると、すでに投影されたデータを扱っていても、拡大/縮小したい場合はd3.geoConicEqualArea()
のようになります。例えば、y軸上の投影を反転するために、彼は示唆:
var reflectY = d3.geoTransform({
point: function(x, y) {
this.stream.point(x, -y);
}
}),
path = d3.geoPath()
.projection(reflectY);
私の質問:私はこのD3の機能を使用する場合は、私はまだ、データの多くを行うために視聴者のブラウザを強制されていません処理が悪くなります。データの前処理のポイントは、これを避けることです。あるいは、私は上記のd3.geoTransform()
関数に含まれる処理作業を過大評価していますか?私はこのD3の機能を使用する場合は
は、この詳細な回答のためにあなたをとても感謝。私は多くのことを学びました。そしてこれらの3つのパフォーマンステストを二重に実行するために!私の最大のTopoJSONファイルはわずか550KBですが、あなたのアドバイスは助けてくれますが、スマートフォンではまだかなりのパフォーマンス上の問題があります:) – Markus
いつものように華麗です!あなたがd3-geoでサンプリングを認識してはならないと信じられませんか? [Adaptive Resampling](https://bl.ocks.org/mbostock/3795544)のMike Bostockのブロックを知っていますか?それはあなたが話していることですよね?それはv3ですが、まだ... – altocumulus
@ Markus、可能であれば、私はあなたのtopojsonを単純化します、550kbはtopojsonのためのかなりのビットです、もしそれがオプションでないなら、キャンバスを使うことは、すでに。 –