Statistics
| Revision:

root / trunk / libraries / libRaster / src-test / org / gvsig / raster / dataset / io / rmf / TestRmfRead.java @ 22936

History | View | Annotate | Download (10.4 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.raster.dataset.io.rmf;
20

    
21
import java.awt.geom.AffineTransform;
22

    
23
import org.gvsig.raster.BaseTestCase;
24
import org.gvsig.raster.RasterLibrary;
25
import org.gvsig.raster.dataset.NotSupportedExtensionException;
26
import org.gvsig.raster.dataset.RasterDataset;
27
import org.gvsig.raster.dataset.io.RasterDriverException;
28
import org.gvsig.raster.dataset.properties.DatasetColorInterpretation;
29
import org.gvsig.raster.dataset.properties.DatasetStatistics;
30
import org.gvsig.raster.dataset.serializer.ColorInterpretationRmfSerializer;
31
import org.gvsig.raster.dataset.serializer.GeoInfoRmfSerializer;
32
import org.gvsig.raster.dataset.serializer.GeoPointListRmfSerializer;
33
import org.gvsig.raster.dataset.serializer.StatisticsRmfSerializer;
34
import org.gvsig.raster.datastruct.ColorTable;
35
import org.gvsig.raster.datastruct.GeoPoint;
36
import org.gvsig.raster.datastruct.GeoPointList;
37
import org.gvsig.raster.datastruct.Histogram;
38
import org.gvsig.raster.datastruct.HistogramClass;
39
import org.gvsig.raster.datastruct.NoData;
40
import org.gvsig.raster.datastruct.serializer.ColorTableRmfSerializer;
41
import org.gvsig.raster.datastruct.serializer.HistogramRmfSerializer;
42
import org.gvsig.raster.datastruct.serializer.NoDataRmfSerializer;
43
/**
44
 * Test de lectura para ficheros rmf. Obtiene distintos tipos de bloques y
45
 * comprueba que el objeto que han de generar es correcto.
46
 * 
47
 * @author Nacho Brodin (nachobrodin@gmail.com)
48
 */
49
public class TestRmfRead extends BaseTestCase {
50
        private String           baseDir = "./test-images/";
51
        private RmfBlocksManager manager = null;
52
        public String            file    = "readtest.rmf";
53
        private RasterDataset    f1      = null;
54
        private String           path1   = baseDir + "03AUG23153350-M2AS-000000122423_01_P001-BROWSE.jpg";
55

    
56
        static {
57
                RasterLibrary.wakeUp();
58
        }
59

    
60
        public void start() {
61
                this.setUp();
62
                this.testStack();
63
        }
64

    
65
        public void setUp() {
66
                System.err.println("TestRmfRead running...");
67
                try {
68
                        deleteRMF(path1);
69
                        f1 = RasterDataset.open(null, path1);
70
                } catch (NotSupportedExtensionException e1) {
71
                        e1.printStackTrace();
72
                } catch (RasterDriverException e1) {
73
                        e1.printStackTrace();
74
                }
75
        }
76

    
77
        public void testStack(){
78
                manager = new RmfBlocksManager(baseDir + file);
79
                if (!manager.checkRmf())
80
                        assertEquals(0, 1);
81
                HistogramRmfSerializer ser = new HistogramRmfSerializer();
82
                ColorTableRmfSerializer ser1 = new ColorTableRmfSerializer();
83
                StatisticsRmfSerializer ser2 = new StatisticsRmfSerializer();
84
                GeoInfoRmfSerializer ser3 = new GeoInfoRmfSerializer(f1);
85
                GeoPointListRmfSerializer ser4 = new GeoPointListRmfSerializer();
86
                NoDataRmfSerializer ser5 = new NoDataRmfSerializer();
87
                ColorInterpretationRmfSerializer ser6 = new ColorInterpretationRmfSerializer(f1.getColorInterpretation());
88

    
89
                manager.addClient(ser);
90
                manager.addClient(ser1);
91
                manager.addClient(ser2);
92
                manager.addClient(ser3);
93
                manager.addClient(ser4);
94
                manager.addClient(ser5);
95
                manager.addClient(ser6);
96

    
97
                try {
98
                        manager.read(null);
99
                        for (int i = 0; i < manager.getClientsCount(); i++) {
100
                                IRmfBlock client = manager.getClient(i);
101
                                if (client instanceof HistogramRmfSerializer)
102
                                        testHistogram((Histogram) client.getResult());
103
                                if (client instanceof ColorTableRmfSerializer) {
104
                                        ColorTable colorTable = (ColorTable) client.getResult();
105
                                        colorTable.setInterpolated(false);
106
                                        testColorTable(colorTable);
107
                                }
108
                                if (client instanceof StatisticsRmfSerializer)
109
                                        testStatistics((DatasetStatistics) client.getResult());
110
                                if (client instanceof NoDataRmfSerializer)
111
                                        testNoData((NoData) client.getResult());
112
//                                if (client instanceof GeoInfoRmfSerializer)
113
//                                        testGeoInfo((RasterDataset) client.getResult());
114
                                if (client instanceof GeoPointListRmfSerializer)
115
                                        testGeoPoints((GeoPointList) client.getResult());
116
                                if (client instanceof ColorInterpretationRmfSerializer) {
117
                                        DatasetColorInterpretation ci = (DatasetColorInterpretation) client.getResult();
118
                                        testColorInterpretation(ci);
119
                                }
120
                        }
121

    
122
                } catch (ParsingException e) {
123
                        e.printStackTrace();
124
                }
125

    
126
        }
127

    
128
        public void testColorInterpretation(DatasetColorInterpretation ci) {
129
                for (int j = 0; j < ci.length(); j++) {
130
                        String value = (String) ci.get(j);
131
//                        System.out.println(value);
132
                        if (j == 0)
133
                                assertEquals(value, "Blue");
134
                        if (j == 1)
135
                                assertEquals(value, "Green");
136
                        if (j == 2)
137
                                assertEquals(value, "Red");
138
                }
139
        }
140
        
141
        public void testHistogram(Histogram h) {
142
                Histogram h2 = Histogram.convertHistogramToRGB(h);
143
                
144
                HistogramClass[][] classes = h2.getHistogram();
145
                for (int iBand = 0; iBand < classes.length; iBand++) {
146
                        for (int iValue = 0; iValue < classes[iBand].length; iValue++) {
147
                                assertEquals((int) classes[iBand][iValue].getMin(), iValue);
148
                                assertEquals((int) classes[iBand][iValue].getMax(), iValue + 1);
149
                        }
150
                }
151

    
152
                assertEquals((int) h.getHistogramValue(0, 0), 16);
153
                assertEquals((int) h.getHistogramValue(0, 1), 4);
154
                assertEquals((int) h.getHistogramValue(0, 23), 6);
155
                assertEquals((int) h.getHistogramValue(0, 48), 4);
156

    
157
                assertEquals((int) h.getHistogramValue(1, 0), 2);
158
                assertEquals((int) h.getHistogramValue(1, 4), 1);
159
                assertEquals((int) h.getHistogramValue(1, 7), 8);
160
                assertEquals((int) h.getHistogramValue(1, 20), 4);
161

    
162
                assertEquals((int) h.getHistogramValue(2, 0), 25);
163
                assertEquals((int) h.getHistogramValue(2, 2), 1);
164
                assertEquals((int) h.getHistogramValue(2, 13), 4);
165
                assertEquals((int) h.getHistogramValue(2, 21), 2);
166
        }
167

    
168
        public void testColorTable(ColorTable ct) {
169

    
170
//                byte[][] color = ct.getColorTableByBand();
171

    
172
//                assertEquals(ct.getName(), "Prueba Tabla de Color");
173

    
174
                assertEquals(ct.getRGBAByBand(15)[0] & 0xff, 95);
175
                assertEquals(ct.getRGBAByBand(15)[1] & 0xff, 95);
176
                assertEquals(ct.getRGBAByBand(15)[2] & 0xff, 95);
177

    
178
                assertEquals(ct.getRGBAByBand(22)[0] & 0xff, 0);
179
                assertEquals(ct.getRGBAByBand(22)[1] & 0xff, 0);
180
                assertEquals(ct.getRGBAByBand(22)[2] & 0xff, 0);
181

    
182
                assertEquals(ct.getRGBAByBand(24)[0] & 0xff, 0);
183
                assertEquals(ct.getRGBAByBand(24)[1] & 0xff, 0);
184
                assertEquals(ct.getRGBAByBand(24)[2] & 0xff, 0);
185

    
186
                assertEquals(ct.getRGBAByBand(28)[0] & 0xff, 0);
187
                assertEquals(ct.getRGBAByBand(28)[1] & 0xff, 0);
188
                assertEquals(ct.getRGBAByBand(28)[2] & 0xff, 0);
189

    
190
                assertEquals(ct.getRGBAByBand(0)[0] & 0xff, 255);
191
                assertEquals(ct.getRGBAByBand(0)[1] & 0xff, 255);
192
                assertEquals(ct.getRGBAByBand(0)[2] & 0xff, 255);
193

    
194
                assertEquals(ct.getRGBAByBand(1)[0] & 0xff, 0);
195
                assertEquals(ct.getRGBAByBand(1)[1] & 0xff, 0);
196
                assertEquals(ct.getRGBAByBand(1)[2] & 0xff, 0);
197

    
198
                assertEquals(ct.getRGBAByBand(2)[0] & 0xff, 0);
199
                assertEquals(ct.getRGBAByBand(2)[1] & 0xff, 102);
200
                assertEquals(ct.getRGBAByBand(2)[2] & 0xff, 255);
201

    
202
//                System.out.println(ct.getName());
203
//                for (int i = 0; i < color.length; i++) {
204
//                        System.out.println((color[i][0] & 0xff) + " " + (color[i][1] & 0xff) + " " + (color[i][2] & 0xff));
205
//                }
206
        }
207

    
208
        public void testNoData(NoData noData) {
209
                assertEquals((int) noData.getValue(), 5450);
210
                assertEquals((int) noData.getType(), 2);
211
        }
212

    
213
        public void testStatistics(DatasetStatistics ds) {
214
                int bandCount = ds.getBandCount();
215
                double[] max = ds.getMaxRGB();
216
                double[] min = ds.getMinRGB();
217
                double[] secondMax = ds.getSecondMaxRGB();
218
                double[] secondMin = ds.getSecondMinRGB();
219
                double[] mean = ds.getMean();
220
                double[] variance = ds.getVariance();
221

    
222
                assertEquals(bandCount, 3);
223
                for (int i = 0; i < bandCount; i++) {
224
                        switch (i) {
225
                                case 0:
226
                                        assertEquals((int) max[i], 250);
227
                                        assertEquals((int) min[i], 0);
228
                                        assertEquals((int) secondMax[i], 248);
229
                                        assertEquals((int) secondMin[i], 1);
230
                                        assertEquals((int) mean[i], 36);
231
                                        assertEquals((int) variance[i], 4984);
232
                                        break;
233
                                case 1:
234
                                        assertEquals((int) max[i], 255);
235
                                        assertEquals((int) min[i], 0);
236
                                        assertEquals((int) secondMax[i], 254);
237
                                        assertEquals((int) secondMin[i], 3);
238
                                        assertEquals((int) mean[i], 37);
239
                                        assertEquals((int) variance[i], 6292);
240
                                        break;
241
                                case 2:
242
                                        assertEquals((int) max[i], 254);
243
                                        assertEquals((int) min[i], 0);
244
                                        assertEquals((int) secondMax[i], 250);
245
                                        assertEquals((int) secondMin[i], 1);
246
                                        assertEquals((int) mean[i], 35);
247
                                        assertEquals((int) variance[i], 4154);
248
                                        break;
249
                        }
250
                }
251

    
252
//                System.out.println(ct.getName());
253
//                System.out.println(ct.getType());
254
//                for (int i = 0; i < color.length; i++) {
255
//                        System.out.print(range[i] + ": ");
256
//                        System.out.println(color[i][0] + " " + color[i][1] + " " + color[i][2]);
257
//                }
258
        }
259

    
260
        public void testGeoInfo(RasterDataset dataset) {
261
        //TODO: TEST: Terminar test de acceso a la georreferenciaci?n.
262
//                String proj = "";
263
//                if(dataset.getProjection() != null)
264
//                        proj = dataset.getProjection().getAbrev();
265
                AffineTransform at = dataset.getAffineTransform();
266

    
267
                assertEquals((int) at.getTranslateX(), 5000);
268
                assertEquals((int) at.getTranslateY(), 5000);
269
                assertEquals((int) at.getScaleX(), 2);
270
                assertEquals((int) at.getScaleY(), -2);
271
        }
272

    
273
        public void testGeoPoints(GeoPointList gpList) {
274
                GeoPoint p = gpList.get(0);
275

    
276
                assertEquals((int) p.pixelPoint.getX(), 10);
277
                assertEquals((int) p.pixelPoint.getY(), 10);
278
                assertEquals((int) p.mapPoint.getX(), 34223);
279
                assertEquals((int) p.mapPoint.getY(), 2344);
280

    
281
                assertEquals(p.active, true);
282

    
283
//                assertEquals((int) p.leftCenterPoint.getX(), 24223);
284
//                assertEquals((int) p.leftCenterPoint.getY(), 3244);
285
//                assertEquals((int) p.rightCenterPoint.getX(), 2433);
286
//                assertEquals((int) p.rightCenterPoint.getY(), 6244);
287
//
288
//                assertEquals((int) p.leftViewPort.getExtent().minX(), 30032);
289
//                assertEquals((int) p.leftViewPort.getExtent().maxY(), 2103);
290
//
291
//                assertEquals((int) p.rightViewPort.getExtent().minX(), 30032);
292
//                assertEquals((int) p.rightViewPort.getExtent().maxY(), 2103);
293

    
294
                assertEquals((int) p.zoomLeft, 1);
295
                assertEquals((int) p.zoomRight, 1);
296
        }
297
}