Как получить доступ к кластерным свойствам кластеризованного векторного источника, созданного с использованием библиотеки supertiler?

#javascript #mapbox #mapbox-gl-js #vector-tiles

#javascript #mapbox #mapbox-gl-js #векторные плитки

Вопрос:

Я конвертирую GeoJSON из 10 миллионов точек в плитки MapBox (.mbtiles), используя библиотеку supertiler.

 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));
  

Затем я загружаю файлы .mbtiles в Mapbox, используя их API загрузки, чтобы я мог добавлять данные в свое приложение в качестве векторного источника.

 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’ и т.д.?

Конечная цель — достичь чего-то подобного.

Заранее спасибо.

Ответ №1:

Похоже, что правильный способ — использовать параметры --reduce --map командной строки и инструмента SuperTiler, которые описаны здесь . Таким образом, вы можете агрегировать свойства, как вам нравится.

Комментарии:

1. Я использовал способ, упомянутый в тестовом файле библиотеки supercluster. Поэтому он должен работать так, как ожидалось. @steve-bennett, отображаются ли свойства кластеризации в свойствах?

Ответ №2:

Векторным слоям требуется время для распространения изменений в источнике при использовании в приложении. Мой код правильно генерирует кластерные свойства.