/[schmitzm]/branches/2.0-GP14/src/skrueger/RasterLegendData.java
ViewVC logotype

Diff of /branches/2.0-GP14/src/skrueger/RasterLegendData.java

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

revision 604 by alfonx, Wed Dec 9 14:15:53 2009 UTC revision 607 by alfonx, Wed Dec 9 15:13:42 2009 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;  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;  import org.geotools.coverage.grid.GridCoverage2D;
# Line 45  import skrueger.geotools.Copyable; Line 47  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}   *         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 65  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) {
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       * Creates a sample {@link GridCoverage2D} (size 1x1, WGS84) for each           * Deep-copies all values of this {@link RasterLegendData} to another
129       * legend value.  These rasters can be used to do visualize the           * {@link RasterLegendData}
130       * legend item in the corresponding color via {@link GridCoverageRenderer}.           */
131       */          @Override
132      public Map<Double, GridCoverage2D> createSampleRasters() {          public RasterLegendData copyTo(RasterLegendData target) {
133        Map<Double, GridCoverage2D> sampleRaster = new HashMap<Double, GridCoverage2D>();                  target.clear();
134                          
135        for (Double rasterValue : keySet()) {                  target.setPaintGaps(isPaintGaps());
136          GridCoverage2D grid = GridUtil.GRID_FAC.create(  
137              "Legend_"+rasterValue,                  for (Double o : keySet()) {
138              new float[][] { { rasterValue.floatValue() } },                          target.put(new Double(o), get(o).copy());
139              new Envelope2D(GTUtil.WGS84, 0,0,1,1)                  }
140          );  
141          sampleRaster.put(rasterValue, grid);                  return target;
142        }          }
         
         
       return sampleRaster;  
     }  
143  }  }

Legend:
Removed from v.604  
changed lines
  Added in v.607

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26