是否可以使用javascript将数据集导出到tileet?我需要经常更新数据源,但这不会自动反映在tileet上。
答案 0 :(得分:0)
我也有同样的问题,似乎应该是自动的,但事实并非如此。如果您有能力在服务器而不是客户端上执行此操作,则一个想法是下载更改的数据集,然后使用mapbox-upload上载数据集,并以“ id”作为所需的磁贴集的ID覆盖(这只是文件名的八个字符的哈希值)。如果您想在浏览器中即时执行此操作,那当然是行不通的。在这种情况下,您可以仅使用数据集中的原始GeoJSON来呈现更改的数据,然后从图块集中滤除更改的数据。然后,定期或手动使用上传api刷新数据集中的图块。
答案 1 :(得分:-1)
我在this帖子的帮助下找到了这个问题的答案。我们可以通过提供geojson文件以及tileet名称来更新Tileset(后端)。如果文件内容有效,则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);
});
在地图集上创建/更新磁贴集后,我可以使用以下代码从客户端站点动态添加图层:
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);