in src/utils/map-style-utils/mapbox-gl-style-editor.js [149:184]
export function scaleMapStyleByResolution(mapboxStyle, scale) {
if (scale !== 1 && mapboxStyle) {
const labelLayerGroup = DEFAULT_LAYER_GROUPS.find(lg => lg.slug === 'label');
// @ts-ignore
const {filter: labelLayerFilter} = labelLayerGroup;
const zoomOffset = Math.log2(scale);
const copyStyle = clondDeep(mapboxStyle);
(copyStyle.layers || []).forEach(d => {
// edit minzoom and maxzoom
if (d.maxzoom) {
d.maxzoom = Math.max(d.maxzoom + zoomOffset, 1);
}
if (d.minzoom) {
d.minzoom = Math.max(d.minzoom + zoomOffset, 1);
}
// edit text size
if (labelLayerFilter(d)) {
if (d.layout && d.layout['text-size'] && Array.isArray(d.layout['text-size'].stops)) {
d.layout['text-size'].stops.forEach(stop => {
// zoom
stop[0] = Math.max(stop[0] + zoomOffset, 1);
// size
stop[1] *= scale;
});
}
}
});
return copyStyle;
}
return mapboxStyle;
}