diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/LayerOrder.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/LayerOrder.java new file mode 100644 index 0000000..940f016 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/LayerOrder.java @@ -0,0 +1,51 @@ +package org.gcube.portlets.user.geoportaldataviewer.client.gis; + +import java.util.HashMap; + +/** + * The Class LayerOrder. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Nov 12, 2021 + */ +public class LayerOrder { + + /** + * The Enum LAYER_TYPE. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Nov 12, 2021 + */ + public static enum LAYER_TYPE { + BASE_MAP, BASE_WMS, WMS_DETAIL, VECTOR + } + + public static final HashMap LAYER_OFFSET = new HashMap(5); + + static { + + LAYER_OFFSET.put(LAYER_TYPE.BASE_MAP, 0); + LAYER_OFFSET.put(LAYER_TYPE.BASE_WMS, 70); + LAYER_OFFSET.put(LAYER_TYPE.WMS_DETAIL, 140); + LAYER_OFFSET.put(LAYER_TYPE.VECTOR, 210); + } + + /** + * Instantiates a new layer order. + */ + public LayerOrder() { + } + + /** + * Gets the offset. + * + * @param layerType the layer type + * @return the offset + */ + public Integer getOffset(LAYER_TYPE layerType) { + return LAYER_OFFSET.get(layerType); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java index cbe9b44..fdc6711 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/client/gis/OpenLayerOSM.java @@ -141,7 +141,9 @@ public abstract class OpenLayerOSM { private LinkedHashMap wmsLayerMap; private Layer baseLayerTile; - + + private LayerOrder layerOrder = new LayerOrder(); + /** * Instantiates a new open layer OSM. @@ -219,7 +221,8 @@ public abstract class OpenLayerOSM { //osmSource.setAttributions(baseLayer.getAttribution()); LayerOptions layerOptions = OLFactory.createOptions(); layerOptions.setSource(osmSource); - layerOptions.setZIndex(0); + int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.BASE_MAP)+1; + layerOptions.setZIndex(zIndex); baseLayerTile = new Tile(layerOptions); break; @@ -234,11 +237,13 @@ public abstract class OpenLayerOSM { LayerOptions layerOptions2 = OLFactory.createOptions(); layerOptions2.setSource(xyz); - layerOptions2.setZIndex(0); + zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.BASE_MAP)+1; + layerOptions2.setZIndex(zIndex); baseLayerTile = new Tile(layerOptions2); break; + } // map == null at init time @@ -405,6 +410,8 @@ public abstract class OpenLayerOSM { LayerOptions layerOptions = OLFactory.createOptions(); layerOptions.setSource(imageWMSSource); + + // Settings MIN and MAX Resolution if (layerItem.getMinResolution() != null) { @@ -415,7 +422,8 @@ public abstract class OpenLayerOSM { } Image wmsLayer = new Image(layerOptions); - + int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.BASE_WMS)+wmsLayerMap.size()+1; + wmsLayer.setZIndex(zIndex); // visibleLayerItems map.addLayer(wmsLayer); @@ -457,6 +465,9 @@ public abstract class OpenLayerOSM { LayerOptions layerOptions = OLFactory.createOptions(); layerOptions.setSource(imageWMSSource); + + + // Settings MIN and MAX Resolution if (layerItem.getMinResolution() != null) { layerOptions.setMinResolution(layerItem.getMinResolution()); @@ -466,7 +477,8 @@ public abstract class OpenLayerOSM { } Image wmsLayer = new Image(layerOptions); - wmsLayer.setZIndex(wmsDetailsLayerMap.size() + 1); + int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.WMS_DETAIL)+wmsDetailsLayerMap.size() + 1; + wmsLayer.setZIndex(zIndex); map.addLayer(wmsLayer); wmsDetailsLayerMap.put(key, wmsLayer); @@ -523,9 +535,12 @@ public abstract class OpenLayerOSM { Vector vectorSource = OLFactory.createVectorSource(); vectorSource.addFeature(feature); vectorLayerOptions.setSource(vectorSource); - + ol.layer.Vector vector = OLFactory.createVector(vectorLayerOptions); - + + int zIndex = layerOrder.getOffset(LayerOrder.LAYER_TYPE.VECTOR)+1; + vector.setZIndex(zIndex); + map.addLayer(vector); } @@ -875,9 +890,11 @@ public abstract class OpenLayerOSM { Image layer1 = wmsDetailsLayerMap.get(layerSource); Image layer2 = wmsDetailsLayerMap.get(layerTarget); - int zIndexS = swapLSource.getPosition() + 1; - int zIndexT = swapLTarget.getPosition() + 1; + int zIndexOffset = layerOrder.getOffset(LayerOrder.LAYER_TYPE.WMS_DETAIL); + int zIndexS = swapLSource.getPosition() + zIndexOffset + 1; + int zIndexT = swapLTarget.getPosition() + zIndexOffset + 1; GWT.log("new zindex source: " + zIndexS + ", new zTarget: " + zIndexT); + layer1.setZIndex(zIndexT); layer2.setZIndex(zIndexS);