Mapbox JS Runtime Styling из коллекции - PullRequest
0 голосов
/ 15 января 2019

Итак, у меня есть набор карт Mapbox, который я загрузил с информацией о блоке переписи для США. Каждая геометрия в наборе плиток имеет свойство с именем GeoID, к которому я пытаюсь применить стиль на основе другой имеющейся у меня коллекции.

Коллекция представляет собой массив объектов этого формата: [{geoid: string, weight: number}, {geoid: string, weight: number},...]

Я хочу сопоставить GeoID из массива со слоем из набора плиток и раскрасить его на основе соответствующего свойства веса этого объекта. Вес - это число от 0 до 1. Я попытался найти документацию по стилю исполнения и выражениям в Mapbox, но я не могу найти ничего о экстраполяции данных из коллекции и ее условном применении к нужной геометрии из набора плиток.

1 Ответ

0 голосов
/ 15 января 2019

Вы можете сгенерировать выражение из вашего списка весов и затем передать его слою, который хотите стилизовать:

const weights = [
    {geoid: 1, weight: 10},
    {geoid: 2, weight: 5},
    {geoid: 3, weight: 30},
];
const cases = weights.map(weight => {
    const condition = ['==', ['get', 'geoid'], weight.geoid];
    const output = getColor(weight.weight);

    return [
        condition,
        output
    ];
});
const expresion = ['case',
    ...cases.reduce((flat, conditionAndOutput) => [...flat, ...conditionAndOutput]),
    '<default-color>'
];

/*
Will result in:
    [
        "case",
        [
        "==",
        [
            "get",
            "geoid"
        ],
        1
        ],
        "rgb(255, 255, 255)",
        [
        "==",
        [
            "get",
            "geoid"
        ],
        2
        ],
        "rgb(255, 255, 255)",
        [
        "==",
        [
            "get",
            "geoid"
        ],
        3
        ],
        "rgb(255, 255, 255)",
        "<default-color>"
    ]
*/
...