Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libRaster / src / org / gvsig / raster / grid / GridReader.java @ 29786

History | View | Annotate | Download (9.15 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 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.grid;
20

    
21
import org.gvsig.raster.RasterLibrary;
22
import org.gvsig.raster.buffer.BufferFactory;
23
import org.gvsig.raster.buffer.RasterBuffer;
24
import org.gvsig.raster.buffer.RasterBufferInvalidAccessException;
25
import org.gvsig.raster.buffer.RasterBufferInvalidException;
26
import org.gvsig.raster.dataset.IBuffer;
27

    
28
/**
29
 * Clase abstracta para lectura de datos de un grid. Esta puede ser creada a partir de
30
 * una fuente de datos (BufferFactory) o a partir de un buffer de datos (RasterBuffer).
31
 * Tiene las operaciones b?sicas de consulta.
32
 * 
33
 * @author Nacho Brodin (nachobrodin@gmail.com)
34
 *
35
 */
36
public abstract class GridReader {
37
        
38
        protected BufferFactory         bufferFactory  = null;
39
        protected RasterBuffer                 rasterBuf      = null;
40
        protected int                                 dataType       = IBuffer.TYPE_UNDEFINED;
41
        protected int[]                                bands          = null;
42
        protected int                                bandToOperate  = 0;
43
        protected double            defaultNoData  = RasterLibrary.defaultNoDataValue;
44
        
45
        /**
46
         * Extent de la ventana que corresponde al Grid 
47
         */
48
        GridExtent windowExtent;
49
        /**
50
         * Extent completo de la capa
51
         */
52
        GridExtent layerExtent;
53
        
54
        /**
55
         * Crea un objeto lector a partir de un buffer de datos y el extent.
56
         * @param rb Buffer de datos
57
         * @param layerExtent extent de la capa completa
58
         * @param windowExtent Extent
59
         * @param bands N?mero de bandas del origen
60
         */
61
        public GridReader(        RasterBuffer rb, 
62
                                                GridExtent layerExtent,
63
                                                GridExtent windowExtent,
64
                                                int[] bands){
65
                rasterBuf = rb;
66
                dataType = rb.getDataType();
67
                this.bands = bands;
68
                this.windowExtent = windowExtent;
69
                this.layerExtent = layerExtent;
70
        }
71
        
72
        /**
73
         * Crea un objeto lector a partir de una fuente de datos y el extent.
74
         * @param rb Buffer de datos
75
         * @param layerExtent extent de la capa completa
76
         * @param windowExtent Extent
77
         * @param bands N?mero de bandas del origen
78
         */
79
        public GridReader(        BufferFactory bf,
80
                                                GridExtent layerExtent,
81
                                                   GridExtent windowExtent,
82
                                                int[] bands){
83
                
84
                bufferFactory = bf;
85
                rasterBuf = (RasterBuffer)bufferFactory.getRasterBuf();
86
                if(bufferFactory.getDataSource() != null && bufferFactory.getDataSource().getDataType() != null)
87
                        dataType = bufferFactory.getDataSource().getDataType()[0];
88
                this.bands = bands;
89
                this.windowExtent = windowExtent;
90
                this.layerExtent = layerExtent;
91
        }
92
        
93
        /**
94
         * Obtiene el valor de tipo byte de una celda. La posici?n x e y de la celda a 
95
         * recuperar est? definida en los par?metros
96
         * @param x Posici?n X del valor que queremos recuperar
97
         * @param y Posici?n Y del valor que queremos recuperar
98
         * @return Valor de tipo byte contenido en la posici?n especificada
99
         */
100
        public abstract byte getCellValueAsByte(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
101
        
102
        /**
103
         * Obtiene el valor de tipo short de una celda. La posici?n x e y de la celda a 
104
         * recuperar est? definida en los par?metros
105
         * @param x Posici?n X del valor que queremos recuperar
106
         * @param y Posici?n Y del valor que queremos recuperar
107
         * @return Valor de tipo short contenido en la posici?n especificada
108
         */
109
        public abstract short getCellValueAsShort(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
110
        
111
        /**
112
         * Obtiene el valor de tipo int de una celda. La posici?n x e y de la celda a 
113
         * recuperar est? definida en los par?metros
114
         * @param x Posici?n X del valor que queremos recuperar
115
         * @param y Posici?n Y del valor que queremos recuperar
116
         * @return Valor de tipo int contenido en la posici?n especificada
117
         */
118
        public abstract int getCellValueAsInt(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
119
        
120
        /**
121
         * Obtiene el valor de tipo float de una celda. La posici?n x e y de la celda a 
122
         * recuperar est? definida en los par?metros
123
         * @param x Posici?n X del valor que queremos recuperar
124
         * @param y Posici?n Y del valor que queremos recuperar
125
         * @return Valor de tipo float contenido en la posici?n especificada
126
         */
127
        public abstract float getCellValueAsFloat(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
128
        
129
        /**
130
         * Obtiene el valor de tipo double de una celda. La posici?n x e y de la celda a 
131
         * recuperar est? definida en los par?metros
132
         * @param x Posici?n X del valor que queremos recuperar
133
         * @param y Posici?n Y del valor que queremos recuperar
134
         * @return Valor de tipo double contenido en la posici?n especificada
135
         */
136
        public abstract double getCellValueAsDouble(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
137
        
138
        /**
139
         * Obtiene el valor de tipo double de una celda. La posici?n x e y de la celda a 
140
         * recuperar est? definida en los par?metros
141
         * @param x Posici?n X del valor que queremos recuperar
142
         * @param y Posici?n Y del valor que queremos recuperar
143
         * @return Valor de tipo double contenido en la posici?n especificada
144
         */
145
        public abstract double getCellValue(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
146
        
147
        /**
148
         * Obtiene el valor de tipo byte de una celda en todas las bandas. 
149
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros. 
150
         * @param x Posici?n X del valor que queremos recuperar
151
         * @param y Posici?n Y del valor que queremos recuperar
152
         * @return Array de tipo byte con el contenido de las bandas en la posici?n especificada
153
         */
154
        public abstract byte[] getBandsValuesAsByte(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException;
155
        
156
        /**
157
         * Obtiene el valor de tipo short de una celda en todas las bandas. 
158
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
159
         * @param x Posici?n X del valor que queremos recuperar
160
         * @param y Posici?n Y del valor que queremos recuperar
161
         * @return Array de tipo short con el contenido de las bandas en la posici?n especificada
162
         */
163
        public abstract short[] getBandsValuesAsShort(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
164
        
165
        /**
166
         * Obtiene el valor de tipo int de una celda en todas las bandas. 
167
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
168
         * @param x Posici?n X del valor que queremos recuperar
169
         * @param y Posici?n Y del valor que queremos recuperar
170
         * @return Array de tipo int con el contenido de las bandas en la posici?n especificada
171
         */
172
        public abstract int[] getBandsValuesAsInt(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
173
        
174
        /**
175
         * Obtiene el valor de tipo float de una celda en todas las bandas. 
176
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
177
         * @param x Posici?n X del valor que queremos recuperar
178
         * @param y Posici?n Y del valor que queremos recuperar
179
         * @return Array de tipo float con el contenido de las bandas en la posici?n especificada
180
         */
181
        public abstract float[] getBandsValuesAsFloat(int x, int y) throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
182
        
183
        /**
184
         * Obtiene el valor de tipo double de una celda en todas las bandas. 
185
         * La posici?n x e y de la celda a recuperar est? definida en los par?metros
186
         * @param x Posici?n X del valor que queremos recuperar
187
         * @param y Posici?n Y del valor que queremos recuperar
188
         * @return Array de tipo double con el contenido de las bandas en la posici?n especificada
189
         */
190
        public abstract double[] getBandsValuesAsDouble(int x, int y)  throws RasterBufferInvalidAccessException, RasterBufferInvalidException ;
191
        
192
        public boolean isNoDataValue (double dValue){
193
                if(rasterBuf != null)
194
                        return (dValue == rasterBuf.getNoDataValue());
195
                else
196
                        return (dValue == defaultNoData);
197
        }
198
        
199
        public double getNoDataValue(){
200
                if(rasterBuf != null)
201
                        return rasterBuf.getNoDataValue();
202
                else 
203
                        return defaultNoData;
204
        }
205
        
206
        public int getNY() {
207
                return windowExtent.getNY();
208
        }
209
        
210
        public int getNX() {
211
                return windowExtent.getNX();
212
        }
213
        
214
        public double getCellSize(){
215
                return windowExtent.getCellSize();
216
        }
217
        
218
        public GridExtent getGridExtent(){
219
                return windowExtent;
220
        }
221
        
222
        public boolean isCellInGrid(int iX, int iY){
223
                return (iX >= 0 && iX < getNX() && iY >= 0 && iY < getNY());
224
        }
225
        
226
        /**
227
         * Asigna la banda sobre la que se realizan las operaciones. Por defecto es la banda 0
228
         * con lo que para el uso de MDTs no habr? que modificar este valor.
229
         * @param band Banda sobre la que se realizan las operaciones.
230
         */
231
        public void setBandToOperate(int band){
232
                this.bandToOperate = band;
233
        }
234
}