Не очень понятно, с какой проблемой вы столкнулись.Если у вас есть три слоя (layer1, layer2, layer3), где верхний слой - layer1, и вы хотите отвечать только на события щелчка для него, вы делаете:
map.on('click', 'layer1', function(e) {...})
Если вы не это имеете в виду,возможно, уточнить, что вы подразумеваете под «перекрывающимися слоями» и «хотите, чтобы обработчик кликов вызывался только для слоя, который находится сверху».Кроме того, предоставьте свой текущий код с примером проблемы.
РЕДАКТИРОВАТЬ
Таким образом, вы хотите одно событие щелчка, которое применяется к нескольким слоям и взаимодействует с самым верхним элементом:
map.on('click', function(e) {
let f = map.queryRenderedFeatures(e.point, { layers: ['layer1','layer2','layer3'] };
if (f.length) {
showPopup(f[0]); //topmost feature
}
});
Если вы хотите различное поведение в зависимости от того, какой слой был поражен:
map.on('click', function(e) {
let f = map.queryRenderedFeatures(e.point, { layers: ['layer1'] };
if (f.length) {
handleLayer1(f[0]);
}
return;
f = map.queryRenderedFeatures(e.point, { layers: ['layer2'] };
if (f.length) {
handleLayer2(f[0]);
}
return;
f = map.queryRenderedFeatures(e.point, { layers: ['layer3'] };
if (f.length) {
handleLayer3(f[0]);
}
});