changeset 4592:11545c3b9111

Floodmap can now be classified in the range 5 to 20 (incl.).
author Christian Lins <christian.lins@intevation.de>
date Thu, 29 Nov 2012 15:34:33 +0100
parents bafb2e81a14a
children 047c965ea542
files flys-artifacts/doc/conf/default-themes.xml flys-artifacts/doc/conf/virtual-themes.xml flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java
diffstat 3 files changed, 26 insertions(+), 78 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/doc/conf/default-themes.xml	Thu Nov 29 10:29:34 2012 +0100
+++ b/flys-artifacts/doc/conf/default-themes.xml	Thu Nov 29 15:34:33 2012 +0100
@@ -1138,7 +1138,7 @@
             <field name="endcolor" type="Color"
                 display="Farbverlauf Endfarbe" default="2, 27, 42" />
             <field name="numclasses" type="int" display="Anzahl Klassen"
-                default="5" />
+                default="6" />
         </fields>
     </theme>
 
--- a/flys-artifacts/doc/conf/virtual-themes.xml	Thu Nov 29 10:29:34 2012 +0100
+++ b/flys-artifacts/doc/conf/virtual-themes.xml	Thu Nov 29 15:34:33 2012 +0100
@@ -162,16 +162,12 @@
     <!-- MAP relevant themes -->
     <theme name="WSPLGENS" type="virtual">
         <fields>
-            <field name="wsplgen_cat1" type="Color" display="Hintergrund"
-                default="178, 201, 215" />
-            <field name="wsplgen_cat2" type="Color" display="Hintergrund"
-                default="111, 147, 170" />
-            <field name="wsplgen_cat3" type="Color" display="Hintergrund"
-                default="66, 111, 139" />
-            <field name="wsplgen_cat4" type="Color" display="Hintergrund"
-                default="33, 79, 108" />
-            <field name="wsplgen_cat5" type="Color" display="Hintergrund"
-                default="2, 27, 42" />
+            <field name="startcolor" type="Color"
+                display="Farbverlauf Startfarbe" default="178, 201, 215" />
+            <field name="endcolor" type="Color"
+                display="Farbverlauf Endfarbe" default="2, 27, 42" />
+            <field name="numclasses" type="int" display="Anzahl Klassen"
+                default="5" />
         </fields>
     </theme>
 
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java	Thu Nov 29 10:29:34 2012 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java	Thu Nov 29 15:34:33 2012 +0100
@@ -10,12 +10,8 @@
 import java.awt.Color;
 import java.awt.Font;
 
-import javax.xml.xpath.XPathConstants;
-
 import org.apache.log4j.Logger;
 import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 
 
 /**
@@ -118,13 +114,13 @@
             "/theme[@name='WSPLGEN']/field";
 
     public final static String XPATH_WSPLGEN_STARTCOLOR =
-            "/theme/field[@name='startcolor'/@default";
+            "/theme/field[@name='startcolor']/@default";
 
     public final static String XPATH_WSPLGEN_ENDCOLOR =
-            "/theme/field[@name='endcolor'/@default";
+            "/theme/field[@name='endcolor']/@default";
 
     public final static String XPATH_WSPLGEN_NUMCLASSES =
-            "/theme/field[@name='numclasses'/@default";
+            "/theme/field[@name='numclasses']/@default";
 
     /** XPATH to bandwidth field. */
     public final static String XPATH_BANDWIDTH =
@@ -630,12 +626,12 @@
     public static String createWSPLGENStyle(Document theme) {
         MapserverStyle ms = new MapserverStyle();
 
-        Color startColor = parseColor(
-                XMLUtils.xpathString(theme, XPATH_WSPLGEN_STARTCOLOR, null));
-        Color endColor = parseColor(
-                XMLUtils.xpathString(theme, XPATH_WSPLGEN_ENDCOLOR, null));
-        int numClasses = Integer.parseInt(
-                XMLUtils.xpathString(theme, XPATH_WSPLGEN_NUMCLASSES, null));
+        String strStartColor = XMLUtils.xpathString(theme, XPATH_WSPLGEN_STARTCOLOR, null);
+        Color startColor = strStartColor != null ? parseColor(strStartColor) : new Color(178, 201, 215);
+        String strEndColor = XMLUtils.xpathString(theme, XPATH_WSPLGEN_ENDCOLOR, null);
+        Color endColor = strEndColor != null? parseColor(strEndColor) : new Color(2, 27, 42);
+        String strNumClasses = XMLUtils.xpathString(theme, XPATH_WSPLGEN_NUMCLASSES, null);
+        int numClasses = strNumClasses != null ? Integer.parseInt(strNumClasses) : 5;
 
         if (numClasses < 5) {
             numClasses = 5;
@@ -644,9 +640,9 @@
             numClasses = 20;
         }
 
-        int rd = (startColor.getRed()   - endColor.getRed())   / numClasses;
-        int gd = (startColor.getGreen() - endColor.getGreen()) / numClasses;
-        int bd = (startColor.getBlue()  - endColor.getBlue())  / numClasses;
+        int rd = (endColor.getRed()   - startColor.getRed())   / numClasses;
+        int gd = (endColor.getGreen() - startColor.getGreen()) / numClasses;
+        int bd = (endColor.getBlue()  - startColor.getBlue())  / numClasses;
 
         for (int n = 0; n < numClasses; n++) {
             StringBuilder newColor = new StringBuilder();
@@ -656,74 +652,30 @@
             newColor.append(' ');
             newColor.append(startColor.getBlue()  + n * bd);
 
-            Clazz c = new Clazz("Klasse " + n + " (FIXME)");
+            String expr = createWSPLGENExpression(n + 1, numClasses);
+
+            Clazz c = new Clazz(expr);
             Style s = new Style();
             s.setColor(newColor.toString());
             s.setSize(5);
 
-            c.addItem(new Expression("Klasse " + n));
-            c.addItem(s);
-
-            ms.addClazz(c);
-        }
-
-        NodeList categories = (NodeList) XMLUtils.xpath(
-                theme,
-                XPATH_WSPLGEN_FIELDS,
-                XPathConstants.NODESET);
-
-        return createWSPLGENStyle(categories).toString();
-    }
-
-    /**
-     * Creates a style for the Mapfile template used by MapfileGenerator
-     * to generate floodmaps.
-     * @param categories
-     * @return
-     */
-    protected static MapserverStyle createWSPLGENStyle(NodeList categories) {
-        MapserverStyle ms = new MapserverStyle();
-
-        for (int i = 0, n = categories.getLength(); i < n; i++) {
-            Element  cat = (Element) categories.item(i);
-            String color = cat.getAttribute("default");
-            String name  = cat.getAttribute("name");
-
-            String expr;
-
-            try {
-                int length = name.length();
-                int idx    = Integer.parseInt(name.substring(length-1, length));
-
-                expr = createWSPLGENExpression(idx);
-            }
-            catch (NumberFormatException nfe) {
-                logger.warn("Error while parsing WSPLGEN category.", nfe);
-                continue;
-            }
-
-            Clazz      c = new Clazz(expr);
-            Style      s = new Style();
-            s.setColor(color.replace(",", ""));
-            s.setSize(5);
-
             c.addItem(new Expression("(" + expr + ")"));
             c.addItem(s);
 
             ms.addClazz(c);
         }
 
-        return ms;
+        return ms.toString();
     }
 
 
-    protected static String createWSPLGENExpression(int idx) {
-        if (idx < 5) {
+    protected static String createWSPLGENExpression(int idx, int maxIdx) {
+        if (idx < maxIdx) {
             int lower = idx - 1;
             return "[DIFF] >= " + lower + " AND  [DIFF] < " + idx;
         }
         else {
-            return "[DIFF] >= 4";
+            return "[DIFF] >= " + (maxIdx - 1);
         }
     }
 

http://dive4elements.wald.intevation.org