Mapbox GL JS: отображать метки карты над слоем?

Я использую Mapbox GL JS с базовым слоем Mapbox Streets. Я добавил полигональный слой с белыми границами и прозрачной заливкой, но мне трудно читать метки базовой карты под полигональным слоем. Посмотрите, как этикетки покрыты белыми рамками:

введите здесь описание изображения

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

Мой код выглядит так:

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v9',
    center: [-2.839, 54.579],
    zoom: 4
});
map.on('load', function () {
    map.addSource('constituencies', {
        'type': 'vector',
        'url': 'mapbox://pcsu.xxx'
    });
    var constituencyLayer = map.addLayer({
        'id': 'constituencies',
        'source': 'constituencies',
        'source-layer': 'constituencies',
        'type': 'fill',
        'paint': {
            'fill-color': 'rgba(162,181,205,0.6)',
            'fill-outline-color': 'white'
        },
        'layout': {
            'visibility': 'visible'
        }
    });

person Richard    schedule 12.03.2017    source источник


Ответы (1)


Взгляните на этот пример Mapbox и используйте второй аргумент map.addLayer(layer, [before]). Если этот слой before существует, новый слой будет размещен перед/под ним. Я думаю, что наименование аргумента здесь немного сбивает с толку.

Имя самого нижнего слоя меток зависит от стиля. Большую часть времени вы ищете housenum-label. В проблемах Mapbox github обсуждается, как упростить этот процесс. , например, путем введения слоев-заполнителей.

person sgelb    schedule 12.03.2017
comment
Спасибо - да, я видел пример, но, как вы говорите, был сбит с толку (я не понимаю, откуда в примере берется аргумент water). В моем примере есть только один слой, слой избирательного округа. Нужно ли как-то называть слой меток? Я пытался просто добавить , 'housenum-label' в качестве последнего аргумента к addLayer, но это не помогло. - person Richard; 13.03.2017
comment
Ах нет, я идиот - добавление , 'housenum-label' в качестве последнего аргумента к addLayer действительно решило проблему! Спасибо. - person Richard; 13.03.2017
comment
Я не думаю, что вы знаете, как сделать housenum-label невидимым для событий щелчка? Теперь он мешает событиям щелчка на слое под ним. - person Richard; 13.03.2017
comment
@Richard IIRC обработчик кликов должен возвращать массив вещей, расположенных там, где произошел щелчок. Если вы хотите отфильтровать эти результаты по идентификатору вашего слоя, вы можете это сделать. Я подозреваю, что порядок по умолчанию, вероятно, такой же, как визуальный порядок. - person alphabetasoup; 09.04.2018