Skip to content

Commit

Permalink
Map / Background layer / Fix active layer on load.
Browse files Browse the repository at this point in the history
Test:
* Open the map
* Reload page
* Active background is not enabled.

This was related to the fact that the search map is also affecting bgLayers.

Only the main map viewer is defining the bgLayers which is used for the base switcher directive.
In case of the context has no active background, use the first one (and log a warning).
Reset default map :
* may fail if no context defined. Add a fallback to the default one (and log a warning).
* tried to use the map layer config if no context defined as it was ignored (but not working - require more work or removal of those unused ? settings)
  • Loading branch information
fxprunayre committed May 31, 2023
1 parent df80822 commit b5acf0a
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,19 @@
*/
module.directive("gnBaselayerswitcher", [
"gnViewerSettings",
"gnSearchSettings",
"gnOwsContextService",
"$rootScope",
function (gnViewerSettings, gnOwsContextService, $rootScope) {
"gnMapsManager",
"gnMap",
function (
gnViewerSettings,
gnSearchSettings,
gnOwsContextService,
$rootScope,
gnMapsManager,
gnMap
) {
return {
restrict: "A",
templateUrl:
Expand All @@ -56,8 +66,9 @@
scope.layers.indexOf(firstLayer) < 0 &&
!scope.layers.fromCtx
) {
scope.map.getLayers().insertAt(0, scope.layers[0]);
scope.setBgLayer(scope.layers[0]);
}

scope.setBgLayer = function (layer) {
layer.setVisible(true);
var layers = scope.map.getLayers();
Expand All @@ -70,40 +81,37 @@
return false;
};

scope.changeBackground = function (layer) {
scope.setBgLayer(layer);
};

scope.$watch(
function () {
return gnViewerSettings.bgLayers;
},
function (bgLayers) {
if (bgLayers && bgLayers.length && bgLayers.length > 0) {
scope.layers = bgLayers;

//Do we remember the previous background layer?
var i = 0;
var j = 0;
bgLayers.forEach(function (layer) {
if (layer.get("currentBackground")) {
i = j;
}
j++;
});

scope.setBgLayer(scope.layers[i]);
}
}
);

scope.reset = function () {
$rootScope.$broadcast("owsContextReseted");
function loadContext() {
gnOwsContextService.loadContextFromUrl(
gnViewerSettings.defaultContext,
scope.map,
gnViewerSettings.additionalMapLayers
);
}

scope.reset = function () {
$rootScope.$broadcast("owsContextReseted");
var mapViewerConfig = gnMap.getMapConfig()["map-" + gnMapsManager.VIEWER_MAP];
if (gnViewerSettings.defaultContext) {
loadContext();
} else if (mapViewerConfig.layers && mapViewerConfig.layers.length > 0) {
// TODO: The map layer config does not seem to work. Something to remove?
gnViewerSettings.bgLayers.length = 0;
scope.layers.length = 0;
gnSearchSettings.viewerMap = gnMapsManager.createMap(
gnMapsManager.VIEWER_MAP
);
} else {
var defaultContext = "../../map/config-viewer.xml";
console.warn(
"Check the map viewer configuration. \n" +
"No context URL and no default layers found. \n" +
"Using " +
defaultContext
);
gnViewerSettings.defaultContext = defaultContext;
loadContext();
}
};
}
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
<div class="gn-margin-bottom" data-ng-show="layers.length > 1">
<h4 data-translate="">backgroundMap</h4>
<h4>
<span data-translate="">backgroundMap</span>
<span ng-if="map.getLayers().item(0).get('loading')">
<span class="fa fa-spin fa-spinner"></span>
</span>
</h4>

<ul class="gn-baselayer-switcher-menu list-group width-100">
<li class="list-group-item" ng-if="::layer" ng-repeat="layer in layers">
<a
href=""
data-ng-class="{'gn-map-layer-selected': layer == map.getLayers().item(0)}"
ng-click="changeBackground(layer);popoverCtrl.dismissPopover()"
ng-click="setBgLayer(layer);popoverCtrl.dismissPopover()"
>
<span ng-if="::!layer.get('loading')">
<span
class="fa gn-margin-right"
ng-class="layer == map.getLayers().item(0) ? 'fa-dot-circle-o' : 'fa-circle-o'"
></span
>{{layer.get('title')}}
</span>
<span ng-if="::layer.get('loading')">
<span class="fa fa-spin fa-spinner"></span>
</span>
<span
class="fa gn-margin-right"
ng-class="layer == map.getLayers().item(0) ? 'fa-dot-circle-o' : 'fa-circle-o'"
></span
>{{layer.get('title')}}
</a>
</li>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@
},
function (data) {
console.warn(data);
defer.reject(response);
defer.reject(data);
}
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"gnOwsCapabilities",
"$http",
"gnViewerSettings",
"gnViewerService",
"$translate",
"$q",
"$filter",
Expand All @@ -78,6 +79,7 @@
gnOwsCapabilities,
$http,
gnViewerSettings,
gnViewerService,
$translate,
$q,
$filter,
Expand Down Expand Up @@ -117,6 +119,7 @@
if (mapType && mapConfig) {
uiConfig = mapConfig["map-" + mapType];
}
var isMainViewer = mapType === "viewer";
// first remove any existing layer
var layersToRemove = [];
map.getLayers().forEach(function (layer) {
Expand Down Expand Up @@ -215,10 +218,13 @@
if (!gnViewerSettings.bgLayers) {
gnViewerSettings.bgLayers = [];
}
gnViewerSettings.bgLayers.length = 0;
if (isMainViewer) {
gnViewerSettings.bgLayers.length = 0;
}

var bgLayers = gnViewerSettings.bgLayers;
bgLayers.fromCtx = true;
var isFirstBgLayer = false;
var isFirstActiveBgLayer = false;
// -------

for (i = 0; i < layers.length; i++) {
Expand Down Expand Up @@ -246,10 +252,12 @@
olLayer.background = true;
olLayer.set("group", "Background layers");
olLayer.setVisible(!layer.hidden);
bgLayers.push(olLayer);
if (isMainViewer) {
bgLayers.push(olLayer);
}

if (!layer.hidden && !isFirstBgLayer) {
isFirstBgLayer = true;
if (!layer.hidden && !isFirstActiveBgLayer) {
isFirstActiveBgLayer = true;
map.getLayers().setAt(0, olLayer);
}
}
Expand All @@ -265,20 +273,25 @@
visible: false
});

if (!layer.hidden && !isFirstBgLayer) {
isFirstBgLayer = true;
if (!layer.hidden && !isFirstActiveBgLayer) {
isFirstActiveBgLayer = true;
loadingLayer.set("bgLayer", true);
}

var layerIndex = bgLayers.push(loadingLayer) - 1;
var layerIndex;
if (isMainViewer) {
layerIndex = bgLayers.push(loadingLayer) - 1;
}
var p = self.createLayer(layer, map, "do not add");

(function (idx, loadingLayer) {
p.then(function (layer) {
if (!layer) {
return;
}
bgLayers[idx] = layer;
if (layerIndex) {
bgLayers[idx] = layer;
}

layer.displayInLayerManager = false;
layer.background = true;
Expand Down Expand Up @@ -357,6 +370,16 @@
}
firstLoad = false;
}
if (!isFirstActiveBgLayer && bgLayers.length > 0) {
console.warn(
"Map context does not contain any active background layer. \n" +
"Set the hidden parameter to false to at least one layer of the group Background layers. \n" +
"Setting the first one in the group as active."
);
bgLayers[0].set("bgLayer", true);
map.getLayers().setAt(0, bgLayers[0]);
}
gnViewerService.openTool("layers");
}
};

Expand Down

0 comments on commit b5acf0a

Please sign in to comment.