我遇到了> 2s 将120 MB geojson
文件转换为protobuf
到Mapnik
矢量图块节点绑定的处理时间。
另一方面提供原始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);
})
});
答案 0 :(得分:3)
GeoJSON和矢量切片各有优缺点,作为Mapbox GL的数据格式。
如果GeoJSON为您服务,我建议您使用它!请注意您的用户可能无法快速下载120 MB的情况。
答案 1 :(得分:0)
矢量图块不是无损的,矢量图块也可以简化几何图形,也可以在角落到图块网格交点处。所以这里有问题,我的矢量图块中的一些多边形没有正确绘制。 你必须意识到这个问题,因为它使我的包裹不可用,因为总是我很容易发现一些包裹线没有正确绘制。
第二个矢量图块仅支持mapbox GL js,geojson支持google map,openlayer,leaflet,bing map,mapquest等.... mapbox js。
如果您担心geojson的性能,这是解决方案:
在服务器端,使用geobuf,将geojson序列化(编码)为协议缓冲区二进制格式,它压缩到原始geojson大小的20%。 120MB-geojson-20MB geobuf。
通过互联网从服务器向客户端浏览器传输20MB geobuf, 再次使用geobuf(javascript lib)解码到geojson。
在浏览器中,直接使用谷歌地图,bing地图,开放层,传单等渲染geojson ....
这为您提供了无损快速的响应解决方案。