gpt4 book ai didi

javascript - 如何为 MapBox GL JS 使用 OpenMapTiles 服务器?

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:00 31 4
gpt4 key购买 nike

在 OpenMapTiles 的 docs 中据说,它可以为 MapBox GL JS 提供矢量图 block 。

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

最佳答案

我还成功使用了 Klokantech 的 tileserver-gl

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

碰巧 npm 中有一个 MBTiles 模块。这使得设置节点 tileserver 变得非常容易。我在博客中解释 herehere .它们都是同一个博客。

这是服务器的 js 代码(部分来自 manuelroth 的 this Git GIST)。我建议阅读上面的博客(herehere),其中显示了结合显示和服务器端的极简示例。 (有一些陷阱可以通过查看示例来避免)。

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);

关于javascript - 如何为 MapBox GL JS 使用 OpenMapTiles 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45888989/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com