我正在通过内部 URI 添加来自多个数据集的 geojson 源。我的 addSources() 函数循环遍历ds_list
,每次调用所需的 ID 数组。如果我在 map.addSource() 调用中获取每个数据集,这可以工作(示例 #1),但是我无法访问所有数据集的特征 ID,用于样式、交互等。
因此,我想将每个 geojson 对象作为变量获取,但在示例 #2 中,获取了第一个数据集并渲染了源/图层,但以下一个返回错误
There is already a source with this ID
。问题是,在进行第二次 addSource() 调用时,ID (ds.label) 已更改,如 console.log() 所示
示例 #1
# works, but feature IDs are not available
function addSources(ds_list){
sources=[]
for(d in ds_list){
ds = ds_list[d]
mappy.addSource(ds.label, {
'type': 'geojson',
'data': '/datasets/'+ds.id+'/geojson'
});
sources.push(ds.label)
renderSourceLayers(ds.label, d)
}
}
示例 #2
# error after 1 dataset: 'There is already a source with this ID'
function addSources(ds_list){
sources=[]
for(d in ds_list){
ds = ds_list[d]
console.log('now doing...', ds.label)
$.getJSON('/datasets/'+ds.id+'/geojson')
.done(function(dsdata) {
mappy.addSource(ds.label, {
'type': 'geojson',
'data': dsdata
});
console.log('just added dsdata', ds.label, dsdata)
sources.push(ds.label)
renderSourceLayers(ds.label, d)
})
}
}
此渲染函数适用于示例 #1,并且永远不会在示例 #2 中为第二个数据集调用
渲染源层()
function renderSourceLayers(dslabel, i){
mappy.addLayer({
'id': 'gl_'+dslabel+'_poly',
'type': 'fill',
'source': dslabel,
'visibility': 'visible',
'paint': {
'fill-color': 'rgba(245,245,245, 0.5)',
'fill-opacity': 0.2,
'fill-outline-color': 'black'
},
'filter': ['==', '$type', 'Polygon']
}, 'z-index-1');
mappy.addLayer({
'id': 'gl_'+dslabel+'_point',
'type': 'circle',
'source': dslabel,
'visibility': 'visible',
'paint': {
'circle-color': colors_point[i],
'circle-radius': {
stops: [[1, 2], [3, 3], [16, 20]]
}
},
'filter': ['==', '$type', 'Point']
}, 'z-index-2');
}
数据集列表,供参考。用于此并生成选择下拉列表和 flyTo() 的边界:
ds_list = [
{
"id": 1,
"label": "dataset01",
"title": "wordy title 01",
"bbox": {"type": "Polygon","coordinates": [[],[],[],[],[]]}
},{
"id": 2,
"label": "dataset02",
"title": "wordy title 02",
"bbox": {"type": "Polygon","coordinates": [[],[],[],[],[]]}
}
]