node-mbtiles, tilelive的mbtiles渲染器和存储后端
Node.js 实用程序和 tilelive 用于 MBTiles格式的集成。
npm install @mapbox/mbtiles
var MBTiles =require('@mapbox/mbtiles');
构造函数
所有的MBTiles实例都需要在任何方法可用之前构建。 注意:下面的所有方法都假设你已经采取了这个步骤。
newMBTiles('./path/to/file.mbtiles', function(err, mbtiles) { console.log(mbtiles) // mbtiles object with methods listed below});
getTile(z, x, y, callback)
从MBTiles表中获取单独的瓦片。 这可以是光栅或者压缩的矢量平铺。 还返回对HTTP服务非常重要的标头。
mbtiles.getTile(z, x, y, function(err, data, headers) { // `data` is your gzipped buffer - use zlib to gunzip or inflate});
getInfo(callback)
获取MBTiles文件的信息,该文件存储在 metadata
表中。 包含在生成过程中创建的缩放级别,边界,vector_layers等信息。 如果未提供 bounds
。minzoom
或者 maxzoom
之类的某些键,则执行回退查询。
mbtiles.getInfo(function(err, info) { console.log(info); // info});
getGrid(z, x, y, callback)
从MBTiles表中获取 UTFGrid。
mbtiles.getGrid(z, x, y, function(err, data) { // continue onwards});
写
英镑 startWriting
和英镑 stopWriting
为了写一个新的( 或者当前现有) MBTiles文件,你需要”开始”和”停止”写入。 首先,构造对象。
mbtiles.startWriting(function(err) { // start writing with mbtiles methods (putTile, putInfo, etc)mbtiles.stopWriting(function(err) { // stop writing to your mbtiles object }); });
putTile(z, x, y, buffer, callback)
将新的平铺缓冲区添加到特定的ZXY。 这可以是光栅平铺,也可以是压缩矢量平铺( 我们建议使用 require('zlib')
来gzip你的)。
var zlib =require('zlib');zlib.gzip(fs.readFileSync('./path/to/file.mvt'), function(err, buffer) { mbtiles.putTile(0, 0, 0, buffer, function(err) { // continue onward }); });
putInfo(data, callback)
将信息对象放入元数据表。 任何嵌套的JSON都将被字符串化并存储在元数据表的”JSON”行中。 这将替换表中所有匹配的键/值字段。
var exampleInfo = { "name":"hello-world", "description":"the world in vector tiles", "format":"pbf", "version":2, "minzoom":0, "maxzoom":4, "center":"0,0,1", "bounds":"-180.000000,-85.051129,180.000000,85.051129", "type":"overlay", "json":`{"vector_layers": [ {"id":"${layername}","description":"","minzoom": 0,"maxzoom": 4,"fields": {} } ] }`};mbtiles.putInfo(exampleInfo, function(err) { // continue onward});
putGrid(z, x, y, grid, callback)
在MBTiles存储中插入 UTFGrid。 网格格式为JSON格式。
var fs =require('fs');var grid =JSON.parse(fs.readFileSync('./path/to/grid.json', 'utf8'));mbtiles.putGrid(0, 0, 0, grid, function(err) { // continue onward});
连接到 tilelive
在规模上工作时,节点mbtiles应该在 Tilelive 生态系统中使用。 例如可以将MBTiles文件设置为”源”,并将目标设置为”接收器”( 使用 tilelive-s3 )。 假设你有一个系统设置为 mbtiles://
协议,指向指向特定文件并授权写入s3桶的系统:
var tilelive =require('@mapbox/tilelive');var MBTiles =require('@mapbox/mbtiles');var s3 =require('@mapbox/tilelive-s3');s3.registerProtocols(tilelive);MBTiles.registerProtocols(tilelive);var sourceUri ='mbtiles:///User/hello/path/to/file.mbtiles';var sinkUri ='s3://my-bucket/tiles/{z}/{x}/{y}';// load the mbtiles sourcetilelive.load(sourceUri, function(err, src) { // load the s3 sinktilelive.load(sinkUri, function(err, dest) { var options = {}; // prepare options for tilelive copyoptions.listScheme=src.createZXYStream(); // create ZXY stream from mbtiles// now copy all tiles to the destinationtilelive.copy(src, dst, options, function(err) { console.log('tiles are now on s3!'); }); }); });
npm test