如何访问使用 supertiler 库创建的集群矢量源的 clusterProperties?
How to access clusterProperties of a clustered vector source created using supertiler library?
我正在使用 supertiler 库将 1000 万个点的 GeoJson 转换为 MapBox 瓦片 (.mbtiles)。
var vList = ['a', 'b', 'c', 'd', 'e', 'f', 'g']; // List of video IDs
supertiler({
input: '../file.json',
output: '../file.mbtiles',
maxZoom: 12,
initial: () => {
var t = Object();
videoList.forEach(v => {
t[v] = 0
});
return t;
},
map: (props) => {
var t = Object();
videoList.forEach(v => {
t[v] = v === props.i ? 1 : 0; // i is the video ID - property of a single point
});
return t;
},
reduce: (accumulated, props) => {
videoList.forEach(v => {
accumulated[v] = accumulated[v] + props[v];
});
}
}).then(null, (err) => console.log(err));
然后我使用他们的上传 API 将 .mbtiles 文件上传到 Mapbox,这样我就可以将数据作为矢量源添加到我的应用程序中。
map.addSource(layerID, {
type: 'vector',
url: 'mapbox://octopusmapbox.vLayer',
});
map.addLayer({
id: `${layerID}-cluster`,
type: 'circle',
source: layerID,
'source-layer': 'geojsonLayer',
maxzoom: 12.99,
paint: {
'circle-color': 'hsla(1, 86%, 65%, 0.5)',
'circle-radius': [
'interpolate',
['linear'],
['get', 'point_count'],
0,
20,
156342,
200,
],
'circle-opacity': 0.7,
'circle-stroke-color': '#f35e5b',
'circle-stroke-width': 1,
},
});
当我控制台记录集群的属性时,我没有看到任何集群属性,只有以下内容:
{
"cluster": true,
"cluster_id": 612,
"point_count": 1399,
"point_count_abbreviated": "1.4k"
}
如何访问属性 'a'、'b'、'c' 等?
最终目标是实现类似 this 的目标。
提前致谢。
看起来正确的方法是使用 SuperTiler 工具的 --reduce
和 --map
命令行参数,这些参数在 here 中有描述。这样,您就可以根据需要聚合属性。
在应用程序中使用时,矢量图层需要时间将更改传播到源。我的代码正确生成了 clusterProperties。
我正在使用 supertiler 库将 1000 万个点的 GeoJson 转换为 MapBox 瓦片 (.mbtiles)。
var vList = ['a', 'b', 'c', 'd', 'e', 'f', 'g']; // List of video IDs
supertiler({
input: '../file.json',
output: '../file.mbtiles',
maxZoom: 12,
initial: () => {
var t = Object();
videoList.forEach(v => {
t[v] = 0
});
return t;
},
map: (props) => {
var t = Object();
videoList.forEach(v => {
t[v] = v === props.i ? 1 : 0; // i is the video ID - property of a single point
});
return t;
},
reduce: (accumulated, props) => {
videoList.forEach(v => {
accumulated[v] = accumulated[v] + props[v];
});
}
}).then(null, (err) => console.log(err));
然后我使用他们的上传 API 将 .mbtiles 文件上传到 Mapbox,这样我就可以将数据作为矢量源添加到我的应用程序中。
map.addSource(layerID, {
type: 'vector',
url: 'mapbox://octopusmapbox.vLayer',
});
map.addLayer({
id: `${layerID}-cluster`,
type: 'circle',
source: layerID,
'source-layer': 'geojsonLayer',
maxzoom: 12.99,
paint: {
'circle-color': 'hsla(1, 86%, 65%, 0.5)',
'circle-radius': [
'interpolate',
['linear'],
['get', 'point_count'],
0,
20,
156342,
200,
],
'circle-opacity': 0.7,
'circle-stroke-color': '#f35e5b',
'circle-stroke-width': 1,
},
});
当我控制台记录集群的属性时,我没有看到任何集群属性,只有以下内容:
{
"cluster": true,
"cluster_id": 612,
"point_count": 1399,
"point_count_abbreviated": "1.4k"
}
如何访问属性 'a'、'b'、'c' 等?
最终目标是实现类似 this 的目标。
提前致谢。
看起来正确的方法是使用 SuperTiler 工具的 --reduce
和 --map
命令行参数,这些参数在 here 中有描述。这样,您就可以根据需要聚合属性。
在应用程序中使用时,矢量图层需要时间将更改传播到源。我的代码正确生成了 clusterProperties。