【发布时间】:2019-03-20 01:07:16
【问题描述】:
有没有办法使用javascript将数据集导出到tileset?我需要经常更新数据源,但这不会自动反映在tileset上。
【问题讨论】:
-
给出你已经实现的参考。
标签: export datasource mapbox
有没有办法使用javascript将数据集导出到tileset?我需要经常更新数据源,但这不会自动反映在tileset上。
【问题讨论】:
标签: export datasource mapbox
我也有同样的问题,似乎它应该是自动的,但事实并非如此。如果您有能力在服务器而不是客户端上执行此操作,则一种想法是下载更改的数据集,然后使用 mapbox-upload 上传数据集,其中“id”作为您要覆盖的瓦片集的 id (这只是文件名的八字符散列)。如果您想在浏览器中即时执行此操作,这当然行不通。在这种情况下,您可以使用数据集中的原始 GeoJSON 渲染更改的数据,从瓦片集中过滤掉更改的数据。然后在某些重复的基础上手动或使用上传 api 从数据集中刷新图块集。
【讨论】:
我在this 帖子的帮助下找到了这个问题的答案。我们可以通过提供geojson文件和tileset名称来更新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);
});
在 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);
【讨论】: