mapnik 矢量瓦片与原始 geojson 性能

Clo*_*die 1 mapnik mapbox-gl-js

我将文件转换为通过的处理时间超过 2 秒120 MB geojsonprotobufMapnikVector Tile 节点绑定。

在另一端提供原始geosjon文件需要不到 200 毫秒

正常吗?如果是,那么提供矢量切片有什么意义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);
  })
});
Run Code Online (Sandbox Code Playgroud)

Luc*_*ski 5

GeoJSON 和矢量切片作为 Mapbox GL 的数据格式各有优缺点。

  • 矢量切片比 GeoJSON 需要更多的预处理
  • GeoJSON 必须完整下载,而矢量切片可以根据需要在切片中下载以填充视口(几乎不可能将所有 Open Street Map 作为单个 X00 GB GeoJSON 下载!)
  • GeoJSON 可以在客户端修改,而矢量图块不能
  • GeoJSON 是人类可读的,而矢量图块不是

如果 GeoJSON 对你有用,我鼓励你使用它!请注意您的用户可能无法快速下载 120 MB 的情况。