Statistics
| Revision:

root / trunk / libraries / libRaster / src / org / gvsig / raster / grid / GridReader.java @ 11067

History | View | Annotate | Download (7.97 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.dataaccess.IQueryableRaster;
22
import org.gvsig.raster.dataaccess.buffer.RasterBuffer;
23
import org.gvsig.raster.dataaccess.buffer.RasterBufferInvalidAccessException;
24
import org.gvsig.raster.dataset.IBuffer;
25

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