1

我正在尝试使用 Mapnik 构建自己的矢量切片服务器。现在,我使用 Tilemill 创建了一个 XML 样式并将其导出以包含在 Mapnik 节点服务器中。

下面是服务器的代码来渲染.mvt瓷砖。

app.get('/tiles/:z/:x/:y.mvt', (req, res, next) => {
  var projection = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';
  var map = new mapnik.Map(256, 256, projection);
  map.load('./mapgather-style/mapgather.xml', {strict: false}, function(err, map) {
    if(err) {
      console.log(err);
    }
    let vtile = new mapnik.VectorTile(parseFloat(req.params.z), parseFloat(req.params.x), parseFloat(req.params.y));
    map.render(vtile, {}, function(err, response) {
      if (err) { console.log(err) }
      res.setHeader('Content-Encoding', 'deflate');
      res.setHeader('Content-Type', 'application/vnd.vector-tile');
      zlib.deflate(response.getData(), (err, mvt) => {
        if(err) { console.log(err) }
        res.send(mvt);
      });
    })
  })
})

我还创建了一个带有leaflet.vectorgrid用于渲染矢量图块的插件的传单地图。该http://localhost:8080/tiles/{z}/{x}/{y}.mvt请求返回瓷砖,但没有任何样式。只有蓝线,如下面的屏幕截图所示。

在此处输入图像描述

我发现我可以使用 Vector grid 插件来设置瓷砖的样式。但我想知道是否可以从服务器预渲染样式。在 Tilemill 我创建了一种样式,但似乎 Mapnik 没有在.mvt响应中包含这种样式。

是否可以预渲染地图样式?希望有人能帮忙!

4

0 回答 0