Я нашел ответ на этот вопрос с помощью этого поста.Мы можем обновить Tileset (внутренняя сторона), указав файл geojson, а также имя набора тайлов.Если содержимое файла является действительным, mapbox автоматически сгенерирует Tileset со всей информацией, которая предоставляется в файле.
var MapboxClient = require('mapbox');
var userName = "<USER>";
var accessToken = "<SECRET-TOKEN>";
const fs = require('fs');
var client = new MapboxClient(accessToken);
// The first step is to connect to MapBox to provision some temporary access credentials to Amazon's S3
client.createUploadCredentials(function(err, credentials) {
// Use aws-sdk to stage the file on Amazon S3
var AWS = require('aws-sdk');
var s3 = new AWS.S3({
accessKeyId: credentials.accessKeyId,
secretAccessKey: credentials.secretAccessKey,
sessionToken: credentials.sessionToken,
region: 'us-east-1'
});
function uploadComplete(err, upload) {
if(err) {
console.log("An error occured creating upload: " + err);
}
}
function putComplete(err, resp) {
if(err) {
return console.log("Error uploading file");
}
console.log("Instructing MapBox to create TilSet...");
// Create Vector TileSet
client.createUpload({
tileset: [userName, tilesetName].join('.'),
url: credentials.url
}, uploadComplete);
}
// Upload data to S3
s3.putObject({
Bucket: credentials.bucket,
Key: credentials.key,
Body: fs.createReadStream(fileName)
}, putComplete);
});
После создания / обновления набора плиток в mapbox я могу добавлять слои на лету изсайт клиента, используя следующий код:
for (var i = 0; i < layers.length; i++) {
if (layers[i].type === 'symbol') {
firstSymbolId = layers[i].id;
break;
}
}
map.addLayer({
'id': TilesetId,
'type': 'circle',
'source': {
'type': 'vector',
'url': 'mapbox://<USER>.'+TilesetName
},
'layout': {},
'source-layer':TilesetName
}, firstSymbolId);