diff --git a/projects/hslayers/common/extensions/layer-extensions.ts b/projects/hslayers/common/extensions/layer-extensions.ts index 0eea9a22e4..77b7112922 100644 --- a/projects/hslayers/common/extensions/layer-extensions.ts +++ b/projects/hslayers/common/extensions/layer-extensions.ts @@ -40,6 +40,7 @@ const GREYSCALE = 'greyscale'; const HS_LAYMAN_SYNCHRONIZING = 'hsLaymanSynchronizing'; const HS_QML = 'qml'; const HS_SLD = 'sld'; +const IGNORE_PATH_ZINDEX = 'ignorePathZIndex'; const INFO_FORMAT = 'info_format'; const INLINE_LEGEND = 'inlineLegend'; const LAYMAN_LAYER_DESCRIPTOR = 'laymanLayerDescriptor'; @@ -622,6 +623,21 @@ export function setSwipeSide( layer.set(SWIPE_SIDE, side); } +/** + * When set to true, prevents z-index to be set based on highest value of layer in + * the same layer (which is default). Used for layers from compositions (basic, permalik) + */ +export function setIgnorePathZIndex( + layer: Layer, + ignorePathZIndex: boolean, +) { + layer.set(IGNORE_PATH_ZINDEX, ignorePathZIndex); +} + +export function getIgnorePathZIndex(layer: Layer) { + return layer.get(IGNORE_PATH_ZINDEX); +} + export const HsLayerExt = { getAccessRights, setAccessRights, diff --git a/projects/hslayers/shared/compositions/compositions-parser.service.ts b/projects/hslayers/shared/compositions/compositions-parser.service.ts index 1e86d52e7a..68ad6869a3 100644 --- a/projects/hslayers/shared/compositions/compositions-parser.service.ts +++ b/projects/hslayers/shared/compositions/compositions-parser.service.ts @@ -39,6 +39,7 @@ import { import { getTitle, setFromBaseComposition, + setIgnorePathZIndex, setMetadata, setSwipeSide, } from 'hslayers-ng/common/extensions'; @@ -767,6 +768,7 @@ export class HsCompositionsParserService { resultLayer = await resultLayer; //createWMTSLayer returns Promise which needs to be resolved first setMetadata(resultLayer, lyr_def.metadata); setSwipeSide(resultLayer, lyr_def.swipeSide); + setIgnorePathZIndex(resultLayer, true); } return resultLayer; } diff --git a/projects/hslayers/shared/layer-manager/layer-manager.service.ts b/projects/hslayers/shared/layer-manager/layer-manager.service.ts index 4e09074c0e..886c66f570 100644 --- a/projects/hslayers/shared/layer-manager/layer-manager.service.ts +++ b/projects/hslayers/shared/layer-manager/layer-manager.service.ts @@ -44,6 +44,7 @@ import { getFromBaseComposition, getFromComposition, getGreyscale, + getIgnorePathZIndex, getLegends, getName, getPath, @@ -196,7 +197,12 @@ export class HsLayerManagerService { */ private setupMapEventHandlers(map: Map) { const onLayerAddition = map.getLayers().on('add', (e) => { - this.applyZIndex(e.element as Layer, true); + this.applyZIndex( + e.element as Layer, + //z-index of composition layers should be the same as order of layers in composition. + //ignoring fodler structure + !getIgnorePathZIndex(e.element as Layer), + ); if (getShowInLayerManager(e.element) == false) { return; } @@ -449,24 +455,20 @@ export class HsLayerManagerService { let curfolder = this.data.folders; const zIndex = lyr.getZIndex(); for (let i = 0; i < parts.length; i++) { - let found = null; - for (const folder of curfolder.sub_folders) { - if (folder.name == parts[i]) { - found = folder; - } - } - if (found === null) { + const found = curfolder.sub_folders.find( + (folder) => folder.name === parts[i], + ); + if (!found) { + const hsl_path = `${curfolder.hsl_path}${curfolder.hsl_path !== '' ? '/' : ''}${parts[i]}`; + const coded_path = `${curfolder.coded_path}${curfolder.sub_folders.length}-`; //TODO: Need to describe how hsl_path works here const new_folder = { sub_folders: [], indent: i, layers: [], name: parts[i], - hsl_path: - curfolder.hsl_path + - (curfolder.hsl_path != '' ? '/' : '') + - parts[i], - coded_path: curfolder.coded_path + curfolder.sub_folders.length + '-', + hsl_path, + coded_path, visible: true, zIndex: zIndex, };