> 2s120 MB geojson
ファイルをprotobuf
〜Mapnik
ベクタータイルノードバインディングに変換する処理時間が発生しています。 200の下ミリを取る生geosjon
ファイルを提供するもう一方の端にmapnikベクトルタイルと未処理geojsonパフォーマンス
。
正常ですか?はいの場合、ベクトルタイルをgeojson
(ここではmapbox-gl-js
と表示しています)以上で表示する点は何ですか?ここで
は、私のコードの抜粋です:
// Load GeoJson into memory
var fs = require("fs");
var content = JSON.parse(fs.readFileSync("us_counties.json"));
// Initialise Mapnik and mercator object
mapnik.register_default_fonts();
mapnik.register_default_input_plugins();
var mercator = new SphericalMercator({
size: 256
});
// Vector Tile Router
router.get('/:z/:x/:y.pbf', function(req, res) {
var bbox = mercator.bbox(
+req.params.x,
+req.params.y,
+req.params.z,
false,
'4326'
);
// Convert GEOJSON to protobuf VectorTile and Serve
var vtile = new mapnik.VectorTile(+req.params.z, +req.params.x, +req.params.y)
vtile.addGeoJSON(JSON.stringify(content), 'fixture_layer')
res.setHeader('Content-Encoding', 'deflate')
res.setHeader('Content-Type', 'application/x-protobuf')
zlib.deflate(vtile.getData(), function(err, pbf) {
res.send(pbf);
})
});
この特定のケースでは、私は間違って何かをしていますか?つまり、mapnikがファイルを処理するのに時間がかかります。ご回答有難うございます。 – Clouddie
これは、シリアルデータの多くでCPUのバウンド操作が非常に多いため、操作が長時間かかることは驚くことではありません。あなたが間違ってやっている限り、その量は前処理ですが、おそらく結果を保存したりキャッシュしたりしたいと思うかもしれません。 MVTで使用されるバイナリエンコーディングは、転送には非常に効率的ですが、再利用のために結果を保存せずにクエリに応答することで廃棄する前処理が必要です。キャッシュ能力を高めるために、そのバイナリでエンコードされた差分形式をタイルに分割します(MVTもあります)。 – marr75