# HG changeset patch # User Ingo Weinzierl # Date 1313769123 0 # Node ID eeebf8514c7f34bf6720b27b84733719064b2656 # Parent 9a77a9adbb36a7a0e3cee18683d410611d011e47 The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet. flys-artifacts/trunk@2514 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 9a77a9adbb36 -r eeebf8514c7f flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Aug 19 14:13:51 2011 +0000 +++ b/flys-artifacts/ChangeLog Fri Aug 19 15:52:03 2011 +0000 @@ -1,3 +1,20 @@ +2011-08-19 Ingo Weinzierl + + * doc/conf/conf.xml: Each river requires a SRID definition. This + definition is used to transform the river's geometries into the desired + projection. + + * src/main/java/de/intevation/flys/artifacts/model/WMSLayerFacet.java: + This facets are able to save a SRID. + + * src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java: + The extent that is written into the WMSLayerFacet is determined by the + boundary of the geometry. + + * src/main/java/de/intevation/flys/utils/GeometryUtils.java: New. A + utility class that provides helper functions for geometries. Currently, + one function is defined, that creates a boundary string for OpenLayers. + 2011-08-19 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/MainValuesArtifact.java, diff -r 9a77a9adbb36 -r eeebf8514c7f flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Fri Aug 19 14:13:51 2011 +0000 +++ b/flys-artifacts/doc/conf/conf.xml Fri Aug 19 15:52:03 2011 +0000 @@ -109,9 +109,9 @@ - - - + + + diff -r 9a77a9adbb36 -r eeebf8514c7f flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WMSLayerFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WMSLayerFacet.java Fri Aug 19 14:13:51 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WMSLayerFacet.java Fri Aug 19 15:52:03 2011 +0000 @@ -29,6 +29,7 @@ protected String hash; protected String url; protected String extent; + protected String srid; private static final Logger logger = Logger.getLogger(WMSLayerFacet.class); @@ -84,6 +85,13 @@ } + public void setSrid(String srid) { + if (srid != null) { + this.srid = srid; + } + } + + public Object getData(Artifact artifact, CallContext context) { return null; } @@ -103,6 +111,7 @@ ec.addAttr(facet, "url", url, true); ec.addAttr(facet, "layers", layers.get(0), true); ec.addAttr(facet, "extent", extent != null ? extent : "", true); + ec.addAttr(facet, "srid", srid != null ? srid : "", true); return facet; } diff -r 9a77a9adbb36 -r eeebf8514c7f flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java Fri Aug 19 14:13:51 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java Fri Aug 19 15:52:03 2011 +0000 @@ -3,18 +3,25 @@ import java.util.List; import java.util.Map; +import com.vividsolutions.jts.geom.Geometry; + import org.apache.log4j.Logger; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.common.utils.Config; + import de.intevation.artifactdatabase.state.Facet; +import de.intevation.flys.model.RiverAxis; + import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.context.FLYSContext; import de.intevation.flys.artifacts.model.WMSLayerFacet; import de.intevation.flys.artifacts.resources.Resources; import de.intevation.flys.artifacts.states.DefaultState.ComputeType; +import de.intevation.flys.utils.GeometryUtils; public class RiverAxisState extends OutputState { @@ -23,6 +30,9 @@ public static final String WMS_LAYER_NAME = "riveraxis"; + public static final String XPATH_RIVER_PROJECTION = + "/artifact-database/floodmap/river-wms[@river='%RIVER%']/@srid"; + private static final Logger logger = Logger.getLogger(RiverAxisState.class); @@ -69,8 +79,21 @@ facet.addLayer(WMS_LAYER_NAME); - // TODO determine extent based on the given geometry - facet.setExtent("6.5 49.1 7.0 49.7"); + RiverAxis axis = RiverAxis.getRiverAxis(river); + if (axis != null) { + // TODO Take the correct EPSG into account. Maybe, we need to + // reproject the geometry. + Geometry geom = axis.getGeom().getBoundary(); + String bounds = GeometryUtils.jtsBoundsToOLBounds(geom); + + logger.debug("River '" + river + "' bounds: " + bounds); + + facet.setExtent(bounds); + } + + String xpath = XPATH_RIVER_PROJECTION.replace("%RIVER%", river); + String srid = Config.getStringXPath(xpath); + facet.setSrid(srid); facets.add(facet); diff -r 9a77a9adbb36 -r eeebf8514c7f flys-artifacts/src/main/java/de/intevation/flys/utils/GeometryUtils.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/GeometryUtils.java Fri Aug 19 15:52:03 2011 +0000 @@ -0,0 +1,32 @@ +package de.intevation.flys.utils; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.Geometry; + + + +public class GeometryUtils { + + private GeometryUtils() { + } + + + /** + * Returns the boundary of Geometry geom in OpenLayers + * representation. + * + * @param geom The geometry. + * + * @return the OpenLayers boundary of geom. + */ + public static String jtsBoundsToOLBounds(Geometry geom) { + Coordinate[] c = geom != null ? geom.getCoordinates() : null; + + if (c == null || c.length < 2) { + return null; + } + + return "" + c[0].x + " " + c[1].y + " " + c[1].x + " " + c[0].y; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :