2016-08-07 9 views
0

> 2s120 MB geojsonファイルをprotobufMapnikベクタータイルノードバインディングに変換する処理時間が発生しています。 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); 
    }) 
}); 

答えて

2

にGeoJSONとベクトルタイルそれぞれがMapbox GLのためのデータ形式として、長所と短所を持っています。

  • ベクトルタイルはにGeoJSON以上の前処理を必要と
  • ベクトルタイルがタイルでダウンロードすることができ、一方にGeoJSONは、ビューポートを埋めるために、必要に応じて(それがオープンストリートマップのすべてをダウンロードすることは不可能に近いだろう全体をダウンロードする必要があります
  • 単一X00 GBにGeoJSONとして!)
  • にGeoJSONは、クライアント側に変更することができる一方、ベクトルタイルできない
  • にGeoJSONベクトルタイルが

ないのに対し、人間が読み取り可能ですGeoJSONがあなたのために働いているなら、私はそれを使用することをお勧めします!ユーザーが120 MBをすばやくダウンロードできない場合があることに注意してください。

+0

この特定のケースでは、私は間違って何かをしていますか?つまり、mapnikがファイルを処理するのに時間がかかります。ご回答有難うございます。 – Clouddie

+0

これは、シリアルデータの多くでCPUのバウンド操作が非常に多いため、操作が長時間かかることは驚くことではありません。あなたが間違ってやっている限り、その量は前処理ですが、おそらく結果を保存したりキャッシュしたりしたいと思うかもしれません。 MVTで使用されるバイナリエンコーディングは、転送には非常に効率的ですが、再利用のために結果を保存せずにクエリに応答することで廃棄する前処理が必要です。キャッシュ能力を高めるために、そのバイナリでエンコードされた差分形式をタイルに分割します(MVTもあります)。 – marr75

0

ベクタータイルは無損失ではありません。ベクタータイルは、グリッドを交差させてコーナーを丸くしてジオメトリを単純化します。だからここで問題が起きます。ベクタータイルのポリゴンの一部が正しく描画されません。 この問題は、私の小包を使用できないようにするため、常に注意しなければなりません。

マップボックスGLタグでサポートされている2番目のベクタータイル、Googleマップ、オープンリーフ、リーフレット、ビンマップ、マップクエストなどでサポートされているgeojson .... mapbox js。

あなたがにGeoJSONのパフォーマンスを心配している場合、ここでのソリューションです:

サーバ側で、プロトコルバッファバイナリフォーマットに(エンコード)にGeoJSONをシリアル化するために、geobufを使用し、それが元にGeoJSONサイズの20%に圧縮します。 120MB-geojson- 20MB geobuf。

20MBのgeobufをサーバーからインターネット経由でクライアントのブラウザに転送すると、 geobuf(javascript lib)を再度使用してgeojsonにデコードします。

ブラウワーでは、これはあなたにロスレスとクイックレスポンス溶液を得....グーグルマップ、ビングマップ、openlayer、リーフレットなどと直接

をレンダリングするにGeoJSON。

関連する問題