首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将OpenMapTiles服务器用于MapBox GL?

如何将OpenMapTiles服务器用于MapBox GL?
EN

Stack Overflow用户
提问于 2017-08-25 20:30:15
回答 3查看 3.9K关注 0票数 9

在OpenMapTiles‘文档中,据说它可以为MapBox GL提供向量块。

但是,为这两个项目挖掘文档,我没有找到一个选项:如何配置自托管的MapBox GL库,以使用来自自托管OpenMapTiles服务器的tiles?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-20 03:00:28

我还能成功地使用Klokantech的tileserver-gl。

然而,我真的想要比这更简约的东西。更小更适合我低智商的东西。

在npm中有一个MBTiles模块。这使得建立一个节点分配器非常容易。我在博客这里这里中解释了这一点。他们都是同一个博客。

以下是服务器的js代码(manuelroth部分借用自这个Git GIST )。我建议阅读上面的博客(这里这里),它展示了一个将显示和服务器端结合在一起的极简示例。(通过查看示例,可以避免一些问题)。

代码语言:javascript
复制
var express = require("express"),
    app = express(),
    MBTiles = require('mbtiles'),
    p = require("path");


// Enable CORS and set correct mime type/content encoding
var header = {
  "Access-Control-Allow-Origin":"*",
  "Access-Control-Allow-Headers":"Origin, X-Requested-With, Content-Type, Accept",
  "Content-Type":"application/x-protobuf",
  "Content-Encoding":"gzip"
};

// Serve the fonts as static files
//app.use('/fonts', express.static('fonts'))
app.use('/fonts', express.static('fonts', {
    setHeaders: function setHeaders(res, path, stat) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Methods', 'GET');
        res.header('Access-Control-Allow-Headers', 'Content-Type');
    }
}))

app.use('/sprite', express.static('sprite', {
    setHeaders: function setHeaders(res, path, stat) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Methods', 'GET');
        res.header('Access-Control-Allow-Headers', 'Content-Type');
    }
}))


// Route which handles requests like the following: /<mbtiles-name>/0/1/2.pbf
app.get('/:source/:z/:x/:y.pbf', function(req, res) {
    console.log('req.params.source : ' + req.params.source)
    console.log('MBTiles file : ' +  p.join(__dirname, req.params.source + '.mbtiles'))
    console.log(req.params.z + '/' + req.params.x + '/' + req.params.y)
  new MBTiles(p.join(__dirname, req.params.source + '.mbtiles'), function(err, mbtiles) {
    mbtiles.getTile(req.params.z, req.params.x, req.params.y, function(err, tile, headers) {
      if (err) {
        res.set({"Content-Type": "text/plain"});
        res.status(404).send('Tile rendering error: ' + err + '\n');
      } else {
        res.set(header);
        res.send(tile);
      }
    });
    if (err) console.log("error opening database");
  });
});

// Starts up the server on port 3000
console.log('__dirname : ' + __dirname)
console.log('command line args:')
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});
console.log('Listening on port: ' + 3000);
app.listen(3000);
票数 6
EN

Stack Overflow用户

发布于 2017-09-24 11:42:08

您可以使用有一个很好的示例的mapbox-gl-js服务器脱机示例来实现这一点。

票数 2
EN

Stack Overflow用户

发布于 2017-09-28 08:51:04

如果安装https://openmaptiles.com/server/,您将得到一个包含所有资产(包括Mapbox的本地副本)的自托管矢量平铺映射。

如果单击样式旁边的" viewer“按钮,就会得到一个示例查看器--即使没有互联网连接也在运行--使用本地向量块、本地资产和本地JavaScript。

这里是开始开发应用程序的地方。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45888989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档