Statistics
| Revision:

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

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

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