# HG changeset patch # User Ingo Weinzierl # Date 1313769443 0 # Node ID 407de0f4b66a6ee7e6ca8daede86292bd4cbf078 # Parent ffb98b228b3c3aa55841b886cf5c7638d15e2279 Set the map projection and its max extent dynamically - information extracted from facets. flys-client/trunk@2515 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r ffb98b228b3c -r 407de0f4b66a flys-client/ChangeLog --- a/flys-client/ChangeLog Fri Aug 12 15:51:51 2011 +0000 +++ b/flys-client/ChangeLog Fri Aug 19 15:57:23 2011 +0000 @@ -1,3 +1,11 @@ +2011-08-19 Ingo Weinzierl + + * src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java: + Determine the max extent of all layers contained in the collection. + + * src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java: Set + the map projection and its max extent determined by MapOutputTab. + 2011-08-12 Sascha L. Teichmann Extract selected data from datacage panel diff -r ffb98b228b3c -r 407de0f4b66a flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java Fri Aug 12 15:51:51 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java Fri Aug 19 15:57:23 2011 +0000 @@ -1,9 +1,11 @@ package de.intevation.flys.client.client.ui.map; +import org.gwtopenmaps.openlayers.client.Bounds; import org.gwtopenmaps.openlayers.client.Map; import org.gwtopenmaps.openlayers.client.MapOptions; import org.gwtopenmaps.openlayers.client.MapWidget; import org.gwtopenmaps.openlayers.client.layer.Vector; +import org.gwtopenmaps.openlayers.client.layer.VectorOptions; import org.gwtopenmaps.openlayers.client.util.JObjectArray; import org.gwtopenmaps.openlayers.client.util.JSObject; @@ -15,13 +17,20 @@ protected MapWidget mapWidget; protected Map map; protected Vector barrierLayer; + protected String srid; + protected Bounds maxExtent; - public FloodMap() { + public FloodMap(String srid, Bounds maxExtent) { + this.srid = srid; + this.maxExtent = maxExtent; + MapOptions opts = new MapOptions(); opts.setControls(new JObjectArray(new JSObject[] {})); opts.setNumZoomLevels(16); opts.setProjection(getRiverProjection()); + opts.setMaxExtent(maxExtent); + opts.setMaxResolution(500); // TODO DO THIS ON THE FLY mapWidget = new MapWidget("510px", "635px", opts); map = mapWidget.getMap(); @@ -41,14 +50,19 @@ public String getRiverProjection() { - return "EPSG:4326"; + return "EPSG:" + srid; } public Vector getBarrierLayer() { if (barrierLayer == null) { - barrierLayer = new Vector(LAYER_BARRIERS); + VectorOptions opts = new VectorOptions(); + opts.setProjection(getRiverProjection()); + opts.setMaxExtent(maxExtent); + + barrierLayer = new Vector(LAYER_BARRIERS, opts); barrierLayer.setIsBaseLayer(true); + map.addLayer(barrierLayer); } diff -r ffb98b228b3c -r 407de0f4b66a flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java Fri Aug 12 15:51:51 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java Fri Aug 19 15:57:23 2011 +0000 @@ -1,5 +1,6 @@ package de.intevation.flys.client.client.ui.map; +import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Widget; @@ -14,6 +15,7 @@ import org.gwtopenmaps.openlayers.client.layer.Layer; import org.gwtopenmaps.openlayers.client.layer.WMS; import org.gwtopenmaps.openlayers.client.layer.WMSParams; +import org.gwtopenmaps.openlayers.client.layer.WMSOptions; import de.intevation.flys.client.shared.model.AttributedTheme; import de.intevation.flys.client.shared.model.Collection; @@ -28,6 +30,9 @@ public class MapOutputTab extends OutputTab { + public static final String DEFAULT_SRID = "4326"; + + protected CollectionView parent; protected Canvas controlPanel; @@ -46,7 +51,7 @@ super(title, collection, mode); this.parent = collectionView; - floodMap = new FloodMap(); + floodMap = new FloodMap(getSrid(), getMaxExtent()); initLayout(); initLayers(); @@ -139,12 +144,66 @@ } } - map.zoomToExtent(extent != null + GWT.log("Maps initial extent = " + extent); + + map.zoomToExtent(extent != null ? extent : new Bounds(-90, -180, 90, 180)); } + public ThemeList getThemeList() { + return collection.getThemeList(mode.getName()); + } + + + public String getSrid() { + ThemeList themeList = getThemeList(); + + int num = themeList.getThemeCount(); + + for (int i = 1; i <= num; i++) { + AttributedTheme theme = (AttributedTheme) themeList.getThemeAt(i); + String srid = theme.getAttr("srid"); + + if (srid != null && srid.length() > 0) { + return srid; + } + } + + return DEFAULT_SRID; + } + + + public Bounds getMaxExtent() { + ThemeList themeList = getThemeList(); + + int num = themeList.getThemeCount(); + + Bounds extent = null; + + for (int i = 1; i <= num; i++) { + AttributedTheme theme = (AttributedTheme) themeList.getThemeAt(i); + String tmp = theme.getAttr("extent"); + + if (theme.getActive() == 1) { + if (extent == null) { + extent = boundsFromString(tmp); + } + else { + Bounds b = boundsFromString(tmp); + + if (b != null) { + extent.extend(b); + } + } + } + } + + return extent; + } + + protected Bounds boundsFromString(String bounds) { if (bounds == null || bounds.length() == 0) { return null; @@ -159,9 +218,9 @@ try { return new Bounds( Double.valueOf(values[0]), - Double.valueOf(values[3]), + Double.valueOf(values[1]), Double.valueOf(values[2]), - Double.valueOf(values[1])); + Double.valueOf(values[3])); } catch (NumberFormatException nfe) {} @@ -191,9 +250,13 @@ params.setLayers(layers); params.setFormat("image/png"); params.setIsTransparent(true); - params.setMaxExtent(new Bounds(90, 180, -90, -180)); - WMS wms = new WMS(desc, url, params); + WMSOptions opts = new WMSOptions(); + opts.setProjection("EPSG:" + getSrid()); + opts.setSingleTile(true); + opts.setRatio(1); + + WMS wms = new WMS(desc, url, params, opts); wms.setIsVisible(at.getActive() == 1); wms.setIsBaseLayer(false);