node-mbtiles, tilelive的mbtiles渲染器和存储后端

adminnode-mbtiles, tilelive的mbtiles渲染器和存储后端已关闭评论条评论 68 次浏览

mbtiles

Node.js 实用程序和 tilelive 用于 MBTiles格式的集成。

Build StatusBuild status

安装


npm install @mapbox/mbtiles


var MBTiles =require('@mapbox/mbtiles');

API

构造函数

所有的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等信息。 如果未提供 boundsminzoom 或者 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