/[schmitzm]/trunk/src/skrueger/RasterLegendData.java
ViewVC logotype

Diff of /trunk/src/skrueger/RasterLegendData.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/src/skrueger/RasterLegendData.java revision 256 by alfonx, Fri Jul 31 14:43:47 2009 UTC branches/2.0-RC2/src/skrueger/RasterLegendData.java revision 621 by alfonx, Thu Jan 28 10:06:05 2010 UTC
# Line 28  Line 28 
28   *     Stefan A. Krüger - additional utility classes   *     Stefan A. Krüger - additional utility classes
29   ******************************************************************************/   ******************************************************************************/
30  package skrueger;  package skrueger;
31    
32  import java.util.Arrays;  import java.util.Arrays;
33  import java.util.HashMap;  import java.util.HashMap;
34  import java.util.LinkedList;  import java.util.LinkedList;
35  import java.util.List;  import java.util.List;
36    import java.util.Map;
37    import java.util.TreeMap;
38    
39  import org.apache.log4j.Logger;  import org.apache.log4j.Logger;
40    import org.geotools.coverage.grid.GridCoverage2D;
41    import org.geotools.geometry.Envelope2D;
42    import org.geotools.renderer.lite.gridcoverage2d.GridCoverageRenderer;
43    
44    import schmitzm.geotools.GTUtil;
45    import schmitzm.geotools.grid.GridUtil;
46    import skrueger.geotools.Copyable;
47  import skrueger.i8n.Translation;  import skrueger.i8n.Translation;
48    
49  /**  /**
50   * Holds all the additional information needed to paint a Legend for a RasterLayer.   * Holds all the additional information needed to paint a Legend for a
51   * So far, only Legends for one-band raster layers are supported.   * RasterLayer. So far, only Legends for one-band raster layers are supported.
52   *   *
53   * @author <a href="mailto:[email protected]">Stefan Alfons Kr&uuml;ger</a>   * @author <a href="mailto:[email protected]">Stefan Alfons Kr&uuml;ger</a>
54   *   *
55     *         TODO implements {@link Copyable}
56   */   */
57  public class RasterLegendData extends HashMap<Double, Translation> {  public class RasterLegendData extends TreeMap<Double, Translation> implements
58          static private final Logger LOGGER = Logger.getLogger(RasterLegendData.class);                  Copyable<RasterLegendData> {
59            static private final Logger LOGGER = Logger
60                            .getLogger(RasterLegendData.class);
61    
62          private Boolean paintGaps = false;          private Boolean paintGaps = false;
63    
64            /**
65             * Shall bigger gaps be painted between the raster images
66             */
67          public Boolean isPaintGaps() {          public Boolean isPaintGaps() {
68                  return paintGaps;                  return paintGaps;
69          }          }
# Line 57  public class RasterLegendData extends Ha Line 73  public class RasterLegendData extends Ha
73          }          }
74    
75          /**          /**
76           * {@link #paintGaps} defines, if gaps should be painted between the legends colors,           * {@link #paintGaps} defines, if gaps should be painted between the legends
77           * indicating nominal values in the raster (e.g. classifications)           * colors, indicating nominal values in the raster (e.g. classifications)
78           */           */
79          public RasterLegendData(boolean paintGaps) {          public RasterLegendData(boolean paintGaps) {
                 super();  
80                  this.paintGaps = paintGaps;                  this.paintGaps = paintGaps;
81          }          }
82    
83          public boolean getPaintGaps() {          /**
84                  return paintGaps ;           * Returns a new list containing all {@link Double} values that shall apear
85          }           * in the legend.
86             */
87          public List<Double> getSortedKeys(){          public List<Double> getSortedKeys() {
88                  Object[] array = keySet().toArray();                  Double[] array = keySet().toArray(new Double[] {});
89    
90                  Arrays.sort(array);                  Arrays.sort(array);
91    
92                  final LinkedList<Double> linkedList = new LinkedList<Double>();                  final LinkedList<Double> linkedList = new LinkedList<Double>();
93                  for (Object o : array){                  for (Double o : array) {
94                          linkedList.add( (Double)o);                          linkedList.add(o);
95                  }                  }
96    
97                  return linkedList;                  return linkedList;
98            }
99    
100            /**
101             * Creates a sample {@link GridCoverage2D} (size 1x1, WGS84) for each legend
102             * value. These rasters can be used to do visualize the legend item in the
103             * corresponding color via {@link GridCoverageRenderer}.
104             */
105            public Map<Double, GridCoverage2D> createSampleRasters() {
106                    Map<Double, GridCoverage2D> sampleRaster = new HashMap<Double, GridCoverage2D>();
107    
108                    for (Double rasterValue : keySet()) {
109                            GridCoverage2D grid = GridUtil.GRID_FAC.create("Legend_"
110                                            + rasterValue,
111                                            new float[][] { { rasterValue.floatValue() } },
112                                            new Envelope2D(GTUtil.WGS84, 0, 0, 1, 1));
113                            sampleRaster.put(rasterValue, grid);
114                    }
115                    return sampleRaster;
116            }
117    
118            /**
119             * Creates a new {@link RasterLegendData} object with identical values
120             */
121            @Override
122            public RasterLegendData copy() {
123                    RasterLegendData copy = (RasterLegendData) super.clone();
124                    return copyTo(copy);
125            }
126    
127            /**
128             * Deep-copies all values of this {@link RasterLegendData} to another
129             * {@link RasterLegendData}
130             */
131            @Override
132            public RasterLegendData copyTo(RasterLegendData target) {
133                    target.clear();
134                    
135                    target.setPaintGaps(isPaintGaps());
136    
137                    for (Double o : keySet()) {
138                            target.put(new Double(o), get(o).copy());
139                    }
140    
141                    return target;
142          }          }
143  }  }

Legend:
Removed from v.256  
changed lines
  Added in v.621

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26