Statistics
| Revision:

root / trunk / libraries / libCq_CMS_praster / src / org / cresques / io / datastruct / HistogramPersistence.java @ 8026

History | View | Annotate | Download (4.07 KB)

1
package org.cresques.io.datastruct;
2

    
3
import java.io.BufferedReader;
4
import java.io.File;
5
import java.io.FileInputStream;
6
import java.io.FileWriter;
7
import java.io.IOException;
8
import java.io.InputStreamReader;
9
import java.io.Reader;
10
import java.io.Writer;
11

    
12
/**
13
 * Clase con herramientas la persistencia de los histogramas calculados.
14
 * Se implementan m?todos para ecribir y leer en los ficheros .rmf correspondientes
15
 * los histogramas calculados.
16
 * @author Miguel ?ngel Querol Carratal? <querol_mig@gva.es>
17
 *
18
 */
19
public class HistogramPersistence {
20

    
21
        
22
        public HistogramPersistence(){
23
        }
24
        
25
        /**
26
         * Crea o modifica el archivo .rmf asociado al GeoRasterFile del que le pasamos
27
         * el nombre con los valores del histograma.
28
         * @param histogram
29
         * @param grfName
30
         * @throws IOException
31
         */
32
        public void makeRMFHistogram(int histogram[][], String grfName, int numBands)throws IOException{
33
                File rmfFile = null;
34
                File rmfAux = null;
35
                Writer writer = null;
36
                boolean copy = true;
37

    
38
                rmfFile = new File(grfName.substring(0, grfName.lastIndexOf(".") + 1) + "rmf");
39
                if(rmfFile.exists()){
40
                        BufferedReader inGrf = new BufferedReader(new InputStreamReader(new FileInputStream(rmfFile)));
41
                        String str = inGrf.readLine();
42
                        rmfAux = new File(grfName.substring(0, grfName.lastIndexOf(".") + 1) + "aux.rmf");
43
                        rmfAux.createNewFile();
44
                        writer = new FileWriter(rmfAux);
45
                        
46
                        while(str != null){
47
                                if(!str.equals("</RasterMetaFile>")){
48
                                        if(str.equals("<Histogram>"))
49
                                                copy = false;
50
                                        if(str.equals("</Histogram>"))
51
                                                copy = true;
52
                                        if(copy && (!str.equals("</Histogram>")))
53
                                                writer.write(str + "\n");
54
                                }else{
55
                                        writer.write(getRMFHistogramHeader());
56
                                        for (int i = 0; i < numBands ; i++){
57
                                                writer.write(getXMLRasterBandHistogram(histogram, i));
58
                                        }
59
                                        writer.write(getRMFHistogramEnd());
60
                                        writer.write(str + "\n");
61
                                }
62
                                str = inGrf.readLine();
63
                        }
64
                        writer.close();
65
                        
66
                        rmfAux.renameTo(rmfFile);
67
                        
68
                        
69
                }else{
70
                        rmfFile.createNewFile();
71
                        writer = new FileWriter(rmfFile);
72
                        writer.write(getRMFHeader());
73
                        writer.write(getRMFHistogramHeader());
74
                        for (int i = 0; i < numBands ; i++){
75
                                writer.write(getXMLRasterBandHistogram(histogram, i));
76
                        }
77
                        writer.write(getRMFHistogramEnd());
78
                        writer.write(getRMFEnd());
79
                        writer.close();
80
                }
81
        }
82
        
83
        
84
        
85
        /**
86
         * Calcula la cabecera del archivo .rmf asociado a la imagen en el caso
87
         * de que ?ste no exista.
88
         * @return
89
         */
90
        private String getRMFHeader(){
91
                StringBuffer buffer = new StringBuffer();
92
                
93
                buffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>\n");
94
                buffer.append("<RasterMetaFile xmlns=\"http://www.gvsig.org\">\n");
95
                
96
                return buffer.toString();
97
        }
98
        
99
        /**
100
         * Crea el final del archivo .rmf asociado a la imagen en el caso de que
101
         * ?ste no exista.
102
         * @return
103
         */
104
        private String getRMFEnd(){
105
                StringBuffer buffer = new StringBuffer();
106
                
107
                buffer.append("</RasterMetaFile>\n");
108
                
109
                return buffer.toString();
110
        }
111
        
112
        /**
113
         * Crea la cabecera en XML para el bloque del histograma completo de la
114
         * imagen.
115
         * @return
116
         */
117
        private String getRMFHistogramHeader(){
118
                StringBuffer buffer = new StringBuffer();
119
                
120
                buffer.append("<Histogram>\n");
121
                buffer.append("\t<FullHistogram>\n");
122
                
123
                return buffer.toString();
124
        }
125
        
126
        /**
127
         * Crea el final en XML para el bloque del histograma completo de la
128
         * imagen.
129
         * @return
130
         */
131
        private String getRMFHistogramEnd(){
132
                StringBuffer buffer = new StringBuffer();
133
                
134
                buffer.append("\t</FullHistogram>\n");
135
                buffer.append("</Histogram>\n");
136
                
137
                return buffer.toString();
138
        }
139
        
140
        /**
141
         * Crea el c?digo XML correspondiendte a los datos del histograma de la 
142
         * imagen de la banda correspondiente.
143
         * @param n_band: banda de la que crear el XML con los datos de su histograma.
144
         * @return
145
         */
146
        private String getXMLRasterBandHistogram(int histogram[][], int n_band){
147
                StringBuffer buffer = new StringBuffer();
148
                
149
                buffer.append("\t\t<Band>\n");
150
                buffer.append("\t\t\t<Values>");
151
                for (int i = 0 ; i <= 255 ; i++)
152
                        buffer.append(histogram[n_band][i] + " ");
153
                buffer.append("</Values>\n");
154
                buffer.append("\t\t</Band>\n");
155
                
156
                return buffer.toString();
157
        }
158
        
159
}