Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/1547 bookmarks sublayers not displayed #1552

Closed
wants to merge 10 commits into from
74 changes: 71 additions & 3 deletions apps/client/src/plugins/Bookmarks/BookmarksModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,32 +53,100 @@ class BookmarksModel {
});
}

getVisibleSubLayers() {
const partlyToggledGroupLayers = {};

// Get all layers from map
const layers = this.map.getLayers().getArray();

// Filter and process group layers
layers.forEach((layer) => {
const props = layer.getProperties();

// Check if it's a visible group layer
if (
layer.getVisible() &&
props.layerType === "group" &&
layer.getSource()?.getParams
) {
const params = layer.getSource().getParams();
if (params?.LAYERS) {
partlyToggledGroupLayers[props.name] = params.LAYERS;
}
}
});

return partlyToggledGroupLayers;
}

setVisibleSubLayers(visibleSubLayers) {
this.map
.getLayers()
.getArray()
.forEach((layer) => {
const props = layer.getProperties();
const layerName = props.name;

// Only process group layers
if (props.layerType === "group" && layer.getSource()?.updateParams) {
if (visibleSubLayers[layerName]) {
const subLayers = visibleSubLayers[layerName];

// Ensure the layer is visible
layer.setVisible(true);

// Update the LAYERS parameter
layer.getSource().updateParams({
LAYERS: subLayers,
});

// Force a refresh of the source
layer.getSource().refresh();
}
}
});
}

getMapState() {
const view = this.map.getView();
const viewCenter = view.getCenter();
const visibleLayers = this.getVisibleLayers();
const visibleSubLayers = this.getVisibleSubLayers();

const pos = {
x: viewCenter[0],
y: viewCenter[1],
z: view.getZoom(),
};

return {
const state = {
m: this.app.config.activeMap,
l: this.getVisibleLayers(),
l: visibleLayers,
gl: visibleSubLayers,
...pos,
};

return state;
}

setMapState(bookmark) {
if (!bookmark) {
return;
}

bookmark = this.getDecodedBookmark(bookmark);

this.setVisibleLayers(bookmark.settings.l);

// Check if the 'gl' parameter exists in the bookmark, if so, apply it, otherwise skip
if (bookmark.settings.gl) {
this.setVisibleSubLayers(bookmark.settings.gl);
}

// Set map view
let view = this.map.getView();
view.setCenter([bookmark.settings.x, bookmark.settings.y]);
view.setZoom(bookmark.settings.z);
bookmark = null;
}

readFromStorage() {
Expand Down
Loading